Pat*_*ald 39 c memory arrays stack allocation
以下代码为我生成堆栈溢出错误
int main(int argc, char* argv[])
{
int sieve[2000000];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?我正在使用Turbo C++,但我想将我的代码保存在C中
编辑:
感谢您的建议.上面的代码只是例如,我实际上在函数中声明了数组而不是在sub main中.此外,我需要将数组初始化为零,所以当我使用Google搜索时,我发现calloc非常适合我的目的.
Malloc/calloc还具有优于堆栈分配的优势,允许我使用变量声明大小.
aru*_*rul 55
您的数组太大而无法放入堆栈,请考虑使用堆:
int *sieve = malloc(2000000 * sizeof(*sieve));
Run Code Online (Sandbox Code Playgroud)
如果您真的想要更改堆栈大小,请查看此文档.
提示: - 不要忘记在不再需要时释放动态分配的内存.
qrd*_*rdl 12
有3种方式:
malloc()
,正如其他海报建议的那样.不要忘记free()
它(虽然main()
它并不重要 - 操作系统会在程序终止时为你清理内存).static
到声明将限制对单元的可见性).static
- 在这种情况下,它将在数据段中分配,但仅在main()
.