当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《声明大型数组时出现堆栈溢出异常》经验,为你挑选了2个好方法。

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

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

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

编辑:

感谢您的建议.上面的代码只是例如,我实际上在函数中声明了数组而不是在sub main中.此外,我需要将数组初始化为零,所以当我使用Google搜索时,我发现calloc非常适合我的目的.

Malloc/calloc还具有优于堆栈分配的优势,允许我使用变量声明大小.



1> arul..:

您的数组太大而无法放入堆栈,请考虑使用堆:

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

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

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


因为这是C,你不需要(事实上,不应该)强制转换malloc的返回值.
@ yodaj007:你不需要明确地转换它.由于赋值的变量也是指针类型,因此赋值执行隐式转换.
@Amy阅读本文:["我是否施放了'malloc`的结果?'"(http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc?s = 1 | 8.2768).它解释了为什么*不*在C中强制转换`malloc`(或任何其他内存分配函数)的几个原因.

2> qrdl..:

有3种方式:

    在堆上分配数组 - 使用malloc(),正如其他海报建议的那样.不要忘记free()它(虽然main()它并不重要 - 操作系统会在程序终止时为你清理内存).

    在单元级别声明数组 - 它将在数据段中分配并且对每个人都可见(添加static到声明将限制对单元的可见性).

    将数组声明为static- 在这种情况下,它将在数据段中分配,但仅在main().

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有