递归main() - 为什么会出现段错误?

use*_*831 10 c stack-overflow segmentation-fault

为什么以下程序会出现段错误?

int main() { main(); }
Run Code Online (Sandbox Code Playgroud)

即使它是一个没有结束的递归,因此根据定义也是无效的,我不明白它为什么是segfaults(gcc 4.4.3和clang 1.5(trunk)).

Mar*_*man 35

你得到一个堆栈溢出(!)

  • 令人惊讶的是,当我第一次点击该链接时,我立即进入堆栈溢出!不是很深的堆栈,我猜...... (2认同)

T.J*_*der 26

因为每次它自己调用它都会分配一点堆栈空间; 最终它耗尽了堆栈空间和段错误.不过,我对于段错误感到有些惊讶; 我本来期望(鼓滚)堆栈溢出!

  • @ user2999831堆栈通常限制为1兆字节. (10认同)

Nic*_*kis 10

int main() { main(); }
Run Code Online (Sandbox Code Playgroud)

会导致堆栈溢出.

但,

这样的优化版本(不是调试模式):

int main() {
   return main();
}
Run Code Online (Sandbox Code Playgroud)

将在尾递归调用中转换递归,即无限循环!