如何在C ++和Unix中获得堆栈溢出?

时间:2011-12-05 18:13:55

标签: c++ unix

我想知道如何通过一个简单的例子来获得堆栈溢出错误,例如:

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

我问这个愚蠢的问题,因为我只有一些 Segmentation fault ,即使是一个空函数调用自己......

我是否遗漏了某些内容,或者是否存在任何保护或阻止我这样做的事情?

4 个答案:

答案 0 :(得分:6)

分段错误意味着内存保护启动并阻止您访问您没有的内存。 variety of reasons可能会发生这种情况,但有一个原因是堆栈溢出(堆栈溢出到其他内存段)。

答案 1 :(得分:3)

如果使用负数或0整数参数调用函数,则将面临无限递归。但是,编译器可能会尾部调用优化该特定函数,除了在调试模式下,您永远不会看到堆栈溢出。分段错误位于其他地方。

答案 2 :(得分:3)

堆栈溢出是一种分段错误,看起来你的系统只输出一般错误。

您可以在此处阅读更多内容:http://en.wikipedia.org/wiki/Segmentation_fault

答案 3 :(得分:0)

Foo()

{

    float f[1024];

    Foo();

}

f是一个虚拟变量,可以帮助快速填充堆栈。