知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。
这个 Bug 是我做这个工程时遇到的:【Visual Studio】Qt 的实时绘图曲线功能,使用 C++ 语言,配合 Qt 开发串口通信界面。
问题
使用 C++ 语言,配合 Qt 开发串口通信界面,在调试动态绘图时,报错 Debug Error!
复制一下错误信息,方便别人在检索时能检索到我这个文章。错误信息如下:
ASSERT: “i >= 0 && i < size()” in file
quytearray.h, line 557
错误截图如下:
解决方案
先定位出错误的代码位置,发现是
QByteArray MyConRevBuff = m_SerialPort.read(14);
这是由于读取的字节数超过了实际可用的字节数,导致数组越界。
为了解决这个问题,可以使用条件语句来检查可用字节数是否足够进行读取。如果可用字节数小于请求的字节数,可以等待更多数据到达或进行适当的错误处理。也就是改成如下语句:文章来源:https://www.toymoban.com/news/detail-513032.html
int bytesToRead = qMin(14, m_SerialPort.bytesAvailable()); // 获取可用字节数和请求字节数的较小值
if (bytesToRead >= 14) {
QByteArray MyConRevBuff = m_SerialPort.read(14);
// 处理读取的数据
} else {
// 可用字节数不足,等待更多数据到达或进行错误处理
}
这样的修改后可以确保仅在可用字节数足够时才进行读取操作,从而避免了数组越界错误。如果可用字节数不足,则可以根据需要进行等待或错误处理。希望能帮到你。文章来源地址https://www.toymoban.com/news/detail-513032.html
Ref.
到了这里,关于【Visual Studio】报错 ASSERT: “i >= 0 && i < size()“,使用 C++ 语言,配合 Qt 开发串口通信界面的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!