知識不是單獨(dú)的,一定是成體系的。更多我的個(gè)人總結(jié)和相關(guān)經(jīng)驗(yàn)可查閱這個(gè)專欄:Visual Studio。
這個(gè) Bug 是我做這個(gè)工程時(shí)遇到的:【Visual Studio】Qt 的實(shí)時(shí)繪圖曲線功能,使用 C++ 語言,配合 Qt 開發(fā)串口通信界面。
問題
使用 C++ 語言,配合 Qt 開發(fā)串口通信界面,在調(diào)試動(dòng)態(tài)繪圖時(shí),報(bào)錯(cuò) Debug Error!
復(fù)制一下錯(cuò)誤信息,方便別人在檢索時(shí)能檢索到我這個(gè)文章。錯(cuò)誤信息如下:
ASSERT: “i >= 0 && i < size()” in file
quytearray.h, line 557
錯(cuò)誤截圖如下:
解決方案
先定位出錯(cuò)誤的代碼位置,發(fā)現(xiàn)是
QByteArray MyConRevBuff = m_SerialPort.read(14);
這是由于讀取的字節(jié)數(shù)超過了實(shí)際可用的字節(jié)數(shù),導(dǎo)致數(shù)組越界。
為了解決這個(gè)問題,可以使用條件語句來檢查可用字節(jié)數(shù)是否足夠進(jìn)行讀取。如果可用字節(jié)數(shù)小于請求的字節(jié)數(shù),可以等待更多數(shù)據(jù)到達(dá)或進(jìn)行適當(dāng)?shù)腻e(cuò)誤處理。也就是改成如下語句:文章來源:http://www.zghlxwxcb.cn/news/detail-513032.html
int bytesToRead = qMin(14, m_SerialPort.bytesAvailable()); // 獲取可用字節(jié)數(shù)和請求字節(jié)數(shù)的較小值
if (bytesToRead >= 14) {
QByteArray MyConRevBuff = m_SerialPort.read(14);
// 處理讀取的數(shù)據(jù)
} else {
// 可用字節(jié)數(shù)不足,等待更多數(shù)據(jù)到達(dá)或進(jìn)行錯(cuò)誤處理
}
這樣的修改后可以確保僅在可用字節(jié)數(shù)足夠時(shí)才進(jìn)行讀取操作,從而避免了數(shù)組越界錯(cuò)誤。如果可用字節(jié)數(shù)不足,則可以根據(jù)需要進(jìn)行等待或錯(cuò)誤處理。希望能幫到你。文章來源地址http://www.zghlxwxcb.cn/news/detail-513032.html
Ref.
到了這里,關(guān)于【Visual Studio】報(bào)錯(cuò) ASSERT: “i >= 0 && i < size()“,使用 C++ 語言,配合 Qt 開發(fā)串口通信界面的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!