堆棧溢出及其原因

在一個程序中,分配給堆棧的內存是有一定限度的。由於C語言系列沒有內置檢查機制來確保複製到緩衝區的數據不得大於緩衝區的大小,因此當這個數據足夠大的時候,將會溢出緩衝區的範圍。堆棧溢出就是不顧堆棧中分配的局部數據塊大小,向該數據塊寫入了過多的數據,導致數據越界,結果覆蓋了別的數據。堆棧溢出時會有意想不到的結果發生,甚至程序會運行崩潰。

一般來說,造成堆棧溢出的原因主要有以下幾個:

1、開了數據非常大的局部數據結構,比如數組,造成堆棧溢出

2、過多的遞歸調用,使用了大量的空間,造成棧溢出

3、有死循環,不斷的往堆棧中寫入數據

所以要養成良好的編程習慣咯,大的數組儘量不要定義在函數內部,遞歸注意深度,不要造成函數死循環。

發佈了27 篇原創文章 · 獲贊 12 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章