簡體   English   中英

C ++在增加一個無符號長整數時崩潰

[英]c++ crashing on incrementing an unsigned long int

這是WTF城市。

幾千次循環后,以下程序崩潰。

unsigned long int nTurn = 1;
bool quit = false;

int main(){
    while(!quit){
        doTurn();
        ++nTurn;
    }
}

當然,這是從我的游戲中簡化的,但是nTurn目前僅在增加它的地方使用,當我注釋掉++ nTurn行時,該程序將永遠可靠地循環。 它不應該成千上萬嗎?

WTF,stackoverflow?

您的問題在其他地方。

程序的其他部分正在讀取通配指針,該指針最終指向nTurn ,當此循環更改值時,其他代碼將執行不同的操作。 或存在比賽條件,增量會使此循環花費一點點時間,因此不會引起麻煩的事情。 您可能在其他地方犯了無數錯誤。

您可以在valgrind下運行程序嗎? 它不會發現某些錯誤,但會發現很多錯誤。

聽起來可能很愚蠢,但是,如果我正在看這個,我可能會輸出nTurn var,看看它是否總是在值上崩潰。 然后,也許初始化nTurn到那,看看是否還會導致它。 您總是可以將其放入調試程序,並查看各種寄存器等發生的情況。 您是否嘗試過其他編譯器?

我將使用調試器來捕獲故障並查看nTurn的值。 或者,如果您從崩潰中提取了核心轉儲,則將其加載到調試器中以在崩潰時查看var值。

還有一點,問題可能出在nTurn繞回並變為零時嗎?

++ nTurn不能直接導致崩潰。 您可能會有某種緩沖區溢出,導致不應使用指針算術訪問nTurn變量的內存。 與增量結合使用時,將導致異常行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM