今天我遇到了一個奇怪的與gcc相遇。考慮下面的代碼:數組值自動更改爲0
float len[ELEM+1];
len[1]=1.0; len[2]=2.0; len[3]=3.0; //length
nod[1][1] = 1;
nod[1][2] = 2;
nod[2][1] = 2;
nod[2][2] = 3;
nod[3][1] = 3;
nod[3][2] = 4; //CONNECTIVITY
for(i=1;i<nnod;i++)
for(j=1;j<nfree;j++)
/* blah blah.........*/
的變化和:
float len[ELEM+1];
len[1]=1.0; len[2]=2.0; len[3]=3.0; //length
nod[1][1] = 1;
nod[1][2] = 2;
nod[2][1] = 2;
nod[2][2] = 3;
nod[3][1] = 3;
nod[3][2] = 4; //CONNECTIVITY
LEN [1] = 1.0; LEN [2] = 2.0;
for(i=1;i<=nnod;i++)
for(j=1;j<=nfree;j++)
/* blah blah.........*/
唯一的區別是在bold.The問題強調的是: 之後當打印長度,所述第一代碼打印len個[1]和LEN [2](和使用它們中的表達式),爲0.0000而第二個代碼是打印並使用這些變量的正確值。
怎麼回事?我完全困惑:-o
注意:len不會在其他地方修改。
由於您刪除了大量的相關信息,因此您的問題非常不清楚。你能發佈一個最小但可編譯的代碼示例來演示這個問題,以便我們可以親眼看到它嗎?此外,你知道在C和C++數組索引從零開始,而不是一個,對吧? – 2009-08-16 13:25:36
發佈一些說明問題的真實可編譯代碼。 – 2009-08-16 13:28:48
並且不做假設。如果len以不同於你想象的價值結束,那麼最可能的是它在其他地方被修改。調試的最基本的事實之一是存在該錯誤,因爲您對代碼的假設是錯誤的*。所以你顯然不能相信這些假設來告訴你錯誤在哪裏或者在哪裏。 – jalf 2009-08-16 13:32:03