c - C中堆栈溢出和无限次循环调用的区别

标签 c stack overflow infinite

我对何时出现堆栈溢出错误以及何时在 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/

相关文章:

c++ - 在 C++ 中使用堆栈和 vector 以相反顺序打印字符串

css - 改变侧边栏导航的高度

C 缓冲区溢出 - 输入多少字节

C - 将 va_list 传递给哨兵终止函数 - 需要 execlp() 的包装器

c - 字符串排序与合并排序

c++ - Stack around variable corrupt,不确定是什么问题

overflow - CSS 扩展文档宽度以适合内容

c - 二维数组如何打印数字及其坐标

c - 使用 libunwind 实现异常

c++ - 指针数组栈实现