【Visual Studio】报错 ASSERT: “i >= 0 && i < size()“,使用 C++ 语言,配合 Qt 开发串口通信界面

知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏: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);

这是由于读取的字节数超过了实际可用的字节数,导致数组越界。

为了解决这个问题,可以使用条件语句来检查可用字节数是否足够进行读取。如果可用字节数小于请求的字节数,可以等待更多数据到达或进行适当的错误处理。也就是改成如下语句:

int bytesToRead = qMin(14, m_SerialPort.bytesAvailable());  // 获取可用字节数和请求字节数的较小值

if (bytesToRead >= 14) {
    
    
    QByteArray MyConRevBuff = m_SerialPort.read(14);
    // 处理读取的数据
} else {
    
    
    // 可用字节数不足,等待更多数据到达或进行错误处理
}

这样的修改后可以确保仅在可用字节数足够时才进行读取操作,从而避免了数组越界错误。如果可用字节数不足,则可以根据需要进行等待或错误处理。希望能帮到你。

Ref.

猜你喜欢

转载自blog.csdn.net/weixin_36815313/article/details/131408365