1. 程式人生 > >堆疊溢位(Stack Overflow)的解決方法

堆疊溢位(Stack Overflow)的解決方法

堆疊溢位是程式除錯中,比較麻煩的一種錯誤,但不外乎就是遞迴和變數申請大空間記憶體;

錯誤時,彈出如下圖所示框框:

其中,0x7c934ffd的值依具體情況而不同。OxC00000FD是錯誤標號;

1. 區域性陣列變數空間太大,如下:

int main(int argc, char* argv[])
{
    char stack_overflow[1024*1024*5];
    stack_overflow[0] = 1;
    return 0;
}

解決這類問題的辦法有兩個,一是增大棧空間(後文中有詳細描述),二是改用動態分配,使用堆(heap)而不是棧(stack)。

 

1.開啟此專案的“屬性頁”對話方塊。有關詳細資訊,請參見設定 Visual C++

專案屬性。

2.單擊“連結器”資料夾。

3.單擊“系統”屬性頁。

4.修改下列任一屬性:

·堆疊提交大小

·堆疊保留大小

(或則在命令列輸入附加項 /STACK:大小)

2. 函數出現無限遞迴呼叫,如下:

void infinite_loop()
{
    infinite_loop();
}

int main(int argc, char* argv[])
{
    infinite_loop();
    return 0;
}

實際應用中,往往由於粗心大意或者函式間的相互呼叫而造成了這樣的結果。解決的辦法當然是找到使用遞迴的地方,並消除BUG