声明大型数组时发生堆栈溢出异常

以下代码为我生成堆栈溢出错误

int main(int argc, char* argv[])
{
    int sieve[2000000];
    return 0;
}

我如何解决这个问题? 我正在使用Turbo C ++,但希望将我的代码保存在C中

编辑:

感谢您的建议。 上面的代码只是例如,我实际上声明了一个函数中的数组,而不是在sub main中。 此外,我需要将数组初始化为零,所以当我使用malloc时,我发现calloc对于我的目的来说是完美的。

malloc / calloc还有一个优势,就是在堆栈上分配,允许我使用变量声明大小。


你的数组太大而不适合堆栈,请考虑使用堆:

int *sieve = malloc(2000000 * sizeof(*sieve));

如果您真的想更改堆栈大小,请查看此文档。

提示: - 当不再需要时,不要忘记释放动态分配的内存。


有3种方式:

  • 在堆上分配数组 - 使用malloc() ,如其他海报建议的那样。 不要忘记free()它(尽管对于main()并不重要 - 操作系统会在程序终止时为你清理内存)。
  • 在单元级别声明数组 - 它将在数据段中分配,并且每个人都可见(向声明添加static会限制对单元的可见性)。
  • 将数组声明为static - 在这种情况下,它将在数据段中分配,但仅在main()可见。

  • 你最好将它分配给堆,而不是堆栈。 就像是

    int main(int argc, char* argv[])
    {
        int * sieve;
        sieve = malloc(20000);
        return 0;
    }
    
    链接地址: http://www.djcxy.com/p/4855.html

    上一篇: Getting a stack overflow exception when declaring a large array

    下一篇: Tell IPython to use an object's `