声明大型数组时发生堆栈溢出异常
以下代码为我生成堆栈溢出错误
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