<分区>
Possible Duplicate:
What is the difference between a segmentation fault and a stack overflow?
我只是想知道,为什么堆栈溢出会导致段错误而不是堆栈溢出。
是不是栈越界导致SIGSEGV?为什么我们在 Linux 中没有遇到堆栈溢出,而是遇到段错误?
int foo()
{
return foo();
}
这段小代码应该会导致堆栈溢出,但它会导致 Linux 中的段错误。
标签 c linux stack-overflow
<分区>
Possible Duplicate:
What is the difference between a segmentation fault and a stack overflow?
我只是想知道,为什么堆栈溢出会导致段错误而不是堆栈溢出。
是不是栈越界导致SIGSEGV?为什么我们在 Linux 中没有遇到堆栈溢出,而是遇到段错误?
int foo()
{
return foo();
}
这段小代码应该会导致堆栈溢出,但它会导致 Linux 中的段错误。
最佳答案
堆栈溢出会导致多种不同类型的硬件错误。
SIGSEGV
(分段违规)信号。SIGILL
(非法指令)信号。所有这些错误都发生在堆栈溢出之后。一种选择是添加堆栈溢出保护(ProPolice,...),以便在堆栈溢出导致更严重的问题之前将其捕获。
编辑:
你的意思是“真正的堆栈溢出”。好吧,这种情况由 SEGV 涵盖(试图访问进程没有权限的内存),因此它获得了一个 SEGV,而不是对更一般的 SEGV 的每个情况进行特殊处理。
关于c - 为什么堆栈溢出导致段错误而不是 Linux 中的堆栈溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6986133/