簡體   English   中英

如何在C ++和Unix中獲得堆棧溢出?

[英]How can I get a stack overflow in C++ and Unix?

我想知道如何通過一個簡單的例子來獲得堆棧溢出錯誤,例如:

int recursSum (int n)
{
   return (n==1)? 1:n+recursSum(n-1);
}

我問這個愚蠢的問題,因為我只有一些Segmentation錯誤 ,即使有一個空函數調用自己...

我是否遺漏了某些東西,或者是否有任何保護或阻止我這樣做的事情?

分段錯誤意味着內存保護啟動並阻止您訪問您沒有的內存。 這可能由於各種原因而發生,但是指出的一個原因是堆棧溢出(將堆棧溢出到其他一段內存中)。

如果使用負數或0整數參數調用函數,則將面臨無限遞歸。 但是,編譯器可能會尾部調用優化該特定函數,除了在調試模式下,您永遠不會看到堆棧溢出。 分段錯誤位於其他地方。

堆棧溢出是一種分段錯誤,看起來您的系統只輸出一般錯誤。

您可以在這里閱讀更多內容: http//en.wikipedia.org/wiki/Segmentation_fault

Foo()

{

    float f[1024];

    Foo();

}

f是一個虛擬變量,可以幫助快速填充堆棧。

暫無
暫無

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

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