2013-04-20 133 views
0

我有一個while循環在我的計劃中,粒子不斷移動,直到它已經訪問了一定數量的地方(由整數placesToVisit給出)。變量意外更改值

int dimensionLength=2; 
int placesToVisit=pow(dimensionLength, 3); 
while (numPlacesVisited<placesToVisit) { 

    // Code which makes no changes or references to placesToVisit 
    // at all (except a few printf commands for debugging). 

} 

我的問題是,經過這個循環placesToVisit的多次迭代突然改變其值設置爲1(因此停止循環過早)。它應該有一個常數值8.這個變量只在while循環的條件語句中使用,沒有指向它的指針,除了我爲了調試而投入的幾條printf命令之外,沒有其它引用。有什麼可能導致placesToVisit突然改變它的價值?

+3

尋找指向棧上的東西的指針/數組操作。如果其中一個出界,它可能會損壞變量。 – DrC 2013-04-20 18:05:58

+0

你需要在這種情況下顯示你的所有代碼。你可能會超出緩衝區或者摧毀堆棧上的其他東西。 – 2013-04-20 18:05:59

+0

您的'dimensionLength'是否超過1290(2147483647的立方根,我認爲這是您的INT_MAX的值)? – 2013-04-20 18:07:12

回答

6

一個可能的解釋是,你越來越不確定的行爲,因爲你以某種方式通過寫一個無效的內存位置(最有可能超越寫在棧上的數組的邊界)破壞您的調用堆棧。變量placesToVisit可能是你被搗毀的堆棧的一個傷亡人員。

但是,沒有看到您的代碼是無法確定的。我懷疑你沒有發佈的代碼會在某處顯示緩衝區溢出。

+0

多一點深入的調試我相信,這是後正確。不過,我最終只是從頭開始重寫代碼,一切正常。不知道錯誤發生在哪裏,但嘿嘿,謝謝你的幫助! – Barry 2013-04-22 12:28:47