笔者在进行基于C++的Qt开发时,多次出现循环语句运行到一半exe崩溃,程序强行退出的问题,经排查发现是因为循环中使用了数组,部分数组变量在循环中越界了,修改前的代码如下所示:由图可知,两个double数组的长度都是8
typedef struct _ArtScope_wfmInfo_
{
double fLsbs[8];
double rangevalue[8];
uInt32 wMaxLSB;
int32 TriggerMode;
uInt32 actualSamples;
uInt32 pAvailSampsPoints;
int32 channelCount;
}ArtScope_wfmInfo, *PArtScope_wfmInfo;
在循环语句中使用了结构体的这两个成员变量
if(historyFileLen >= 1024)
{
if(buff_busy==1)
{
for(k=0; k<1024;k++)
{
voltData[k] = (filewfmInfo.fLsbs[k%filewfmInfo.channelCount]*(fileBuf[k]&filewfmInfo.wMaxLSB)-filewfmInfo.rangevalue[k%filewfmInfo.channelCount]);
}
}
打印fLsbs 和rangevalue的索引值发现,远远超了8,即数组越界。将定义中的数组长度修改为1024,则循环可以正常结束。
typedef struct _ArtScope_wfmInfo_
{
double fLsbs[1024];
double rangevalue[1024];
uInt32 wMaxLSB;
int32 TriggerMode;
uInt32 actualSamples;
uInt32 pAvailSampsPoints;
int32 channelCount;
}ArtScope_wfmInfo, *PArtScope_wfmInfo;