一個類:
class PPP {
public:
***省略***
float WL_FCB[MAX_SYS_NUM][MAX_GPS_SAT];/*變數WL_FCB*/
vector<FCB> NL_FCB;/*變數NL_FCB*/
private:
***省略***
};
在一個函式中賦值:
int read_myfcb(CString &myfcbpath, float WL_FCB[MAX_SYS_NUM][MAX_GPS_SAT], vector<FCB> &NL_FCB) {
//打開檔案
***省略***
/*WL*/
while (true) {/*第一個while*/
***省略***
if (fline.Find(_T("WL")) >= 0) {
WL_FCB[SYS(fline[4])][_ttoi(fline.Mid(5, 2))] = _ttof(fline.Mid(10, 10));/*對WL_FCB賦值*/
}
}
/*NL*/
while (true)/*第二個while*/
{
***省略***
}
readfile.Close();
return 1;
}
詭異的地方:
當函式在第一個while(函式第6行)時,NL_FCB大小為0,正常;但是當函式運行到第二個while(函式第13行)時,NL_FCB的大小突然變為67922558。

第一個while中根本沒有對NL_FCB進行操作
修改兩個地方可以正常:
一是將類中的WL_FCB跟NL_FCB的定義調換順序
二是將對WL_FCB賦值的陳述句注釋,即函式第9行
uj5u.com熱心網友回復:
應該是WL_FCB的下標越界了,WL_FCB[SYS(fline[4])][_ttoi(fline.Mid(5, 2))]看看這兩個SYS(fline[4]),_ttoi(fline.Mid(5, 2))是否有越界 0-MAX_SYS_NUM-1,0-MAX_GPS_SAT-1
uj5u.com熱心網友回復:
/*WL*/
while (true) {/*第一個while*/
***省略***
if (fline.Find(_T("WL")) >= 0) {
WL_FCB[SYS(fline[4])][_ttoi(fline.Mid(5, 2))] = _ttof(fline.Mid(10, 10));/*對WL_FCB賦值*/
}
}
建議把這段注釋后看看。
uj5u.com熱心網友回復:
估計是陷入死回圈了,記憶體Buffer越界了導致的轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/37719.html
標籤:C++ 語言
上一篇:關于new后面的這種語法啥意思
