我使用CVI7.0在编一个数字信号处理程序,其中主要用GRAPH控件显示时域波形和频谱数据,遇到一些无法解释的错误,通过单步调试跟踪发现一些现象,但是我找不到原因。
1. 与plot关联的光标设置序号总是出错,NON-FATAL RUN-TIME ERROR。
hSpecPlot = PlotXY (specpanel, SPECPANEL_GRAPH, pDsplFrqArray, pDsplSpecData,
nXNumber*nCurveNumber, VAL_DOUBLE, VAL_DOUBLE, VAL_THIN_LINE,
VAL_SIMPLE_DOT, VAL_SOLID, 1, VAL_BLACK);
SetGraphCursorIndex (specpanel, SPECPANEL_GRAPH, 1, hSpecPlot, nCursorIdx);
出错时程序break, 察看变量值,确实0 < nCursorIdx < nXNumber*nCurveNumber
NON-FATAL RUN-TIME ERROR: "SpecChart.c", line 718, col 5, thread id 0x00000804: Library function error (return value == -83 [0xffffffad]). New cursor position is outside plot area
为什么?
2.设置GRAPH控件的属性时导致全局指针变量意外被释放
SetAxisScalingMode (timepanel, TIMEPANEL_GRAPH, VAL_BOTTOM_XAXIS, nScaleMode, 0.0, (double)(lnSize-1));
FATAL RUN-TIME ERROR: "TimeWave.c", line 200, col 5, thread id 0x00000B78: The program has caused a 'General Protection' fault at 001B:685C08B3.
该语句在我的程序中随着显示内容的不同会执行很多遍,只要执行一段逆FFT运算和插值运算后想显示数据从而执行该语句时就出错,其他时候却运行正常。错误出现break时发现有时候居然会把一个全局指针变量意外释放,而该指针变量指向的正好就是我要显示的数据!不知道原因。有时候出错时改指针变量很正常,但就是要出现这个错误!
3.设置GRAPH控件的属性时导致局部指针变量意外被释放
pAxisItemValue=(double*)malloc(nAxisItemNumb*sizeof(double));
pAxisLabel=(char**)malloc(nAxisItemNumb*sizeof(char*));
InsertAxisItem (timepanel, TIMEPANEL_GRAPH, VAL_BOTTOM_XAXIS, i, pAxisLabel[i], pAxisItemValue[i]-nStartIndex);(line 216)
FATAL RUN-TIME ERROR: "TimeWave.c", line 216, col 9, thread id 0x00000F60: The program has caused a 'General Protection' fault at 001B:685C08B3.
该语句在我的程序中随着显示内容的不同会执行很多遍,大部分时候都运行正常,出错也是在执行一段逆FFT运算和插值运算后。错误出现break时发现有时候居然刚申请了空间的两个指针变量被意外释放了!