C编程:堆栈溢出是突然终止的原因



在C编程中出现堆栈溢出的情况下,为什么我们告诉它循环突然终止。棚屋溢出不是无限循环的原因。但是导致突然终止,虽然我们看不到,但它在哪里终止。 右?? 比如说对于这个程序,它会导致堆栈溢出,但不是无限循环的情况

int foo(int val) {
int x=0;
while(val > 0) {
x = x + foo(val--);
}
return val;
}

但是为什么我们不能把它说成是无限循环呢?为什么说是突然终止??

由于这是递归,函数 foo(( 的每次调用都会增加堆栈。正如我们所知,循环永远不会结束,所以在某些时候堆栈会增加很多,以至于操作系统将终止代码并给出堆栈溢出错误。

最新更新