可能重复:
What is the difference between a segmentation fault and a stack overflow?
我只是想知道,为什么堆栈溢出导致分段错误而不是堆栈溢出。
是否因为超出堆栈限制的边界而导致SIGSEGV?为什么我们在Linux中没有遇到堆栈溢出,而是一个分段错误?
int foo()
{
return foo();
}
这个小代码应该导致堆栈溢出,但它会导致Linux中的分段错误。
答案 0 :(得分:8)
堆栈溢出可能导致几种不同的硬件错误。
SIGSEGV
(分段违例)信号。SIGILL
(非法指令)信号。在堆栈溢出后发生所有这些错误。一个选项是添加堆栈溢出保护(ProPolice,...),以便在它们引起更严重的问题之前捕获堆栈溢出。
编辑:
你的意思是“真正的堆栈溢出”。好吧,这种情况由SEGV覆盖(尝试访问进程没有权限的内存),因此它获得了一个SEGV,而不是特殊套管的每一个更一般的SEGV情况。
答案 1 :(得分:2)
Stackoverflow不是错误,它是一种情况,从它抛出的错误会从语言变为语言,从平台变为平台。
详细了解segmentation fault in wiki
修改强>
为了更清楚 - 在您的情况下,调用堆栈溢出,程序尝试写下一个无效地址的调用,导致分段错误。