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