堆疊溢位(Stack Overflow)的解決方法
阿新 • • 發佈:2019-02-06
堆疊溢位是程式除錯中,比較麻煩的一種錯誤,但不外乎就是遞迴和變數申請大空間記憶體;
錯誤時,彈出如下圖所示框框:
其中,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;
}