我对何时出现堆栈溢出错误以及何时在 C 中无限次调用循环感到困惑!!两者是否相同,如果不同,那么两种情况之间有什么区别。请帮忙。
最佳答案
递归调用一个没有终止的函数肯定会导致栈溢出。但并非每个堆栈溢出都是由没有基本情况的递归调用引起的。
例如为一个巨大的本地数组分配存储也很可能导致堆栈溢出。
以下在我的机器上失败并出现段错误(由于我的分配超出了堆栈的大小,我可能尝试访问不属于我的程序的内存):
#include <stdio.h>
int main()
{
int arr[1000 * 1000 * 100];
arr[99999999] = 0;
printf("%d\n", arr[99999999]);
return 0;
}
一个你无法恢复的无限循环不会自动导致堆栈溢出(如果你简单地调用 for(;;) { int i = 1; }
这本身不是一个堆栈溢出)。
关于c - C中堆栈溢出和无限次循环调用的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17402405/