牛骨文教育服务平台(让学习变的简单)
博文笔记

C++调用大数组出现栈溢出的问题解决方法,堆和栈的完全解析

创建时间:2013-07-21 投稿人: 浏览次数:160

总结:除非特别要求,不应开一个大于>100的数组,是很不明智的!

主要有两个办法:
一 改为堆变量:
int* pa = malloc(sizeof(int)*1000*1000);
然后可以将pa当数组用。(数组和指针在C里基本等同)
当然,不用了记得free pa。

二 修改系统限制
这个栈变量= 1000*1000*4 = 4M。(约等于)
如果这个函数不频繁调用,也不递归,一般还是可以接受。
可以修改操作系统对进程栈空间的大小限制,稍微调大一些。

当然方法二非常不值得推荐

在VS中解决步骤可以是:

用VS2005写程序,默认的栈大小是1M。我们在程序中的变量及静态数组都是储存在栈中的。一旦变量和静态数组的规模超过了栈的大小,就会发生栈溢出错误。

在 Visual Studio 开发环境中设置此编译器选项
1、打开此项目的“属性页”对话框。有关详细信息,请参见设置 Visual C++ 项目属性。
2、单击“C/C++”文件夹。
3、单击“命令行”属性页。
4、在“附加选项”框中键入编译器选项。

VC6.0解决方法可以是:

Visual C++ 编译器选项   
/F(设置堆栈大小)
/F[ ]number
其中:
number
堆栈大小(以字节为单位)。

备注
此选项设置程序堆栈大小(以字节为单位)。如果不使用此选项,堆栈大小默认为 1 MB。number 参数可以用十进制或 C 语言表示法表示。参数的范围可以在 1 到链接器接受的最大堆栈大小之间。链接器将指定值向上舍入为最接近的 4 个字节。/F 和 number 之间的空格是可选的。

如果程序获得堆栈溢出消息,则可能需要增加堆栈大小。

设置堆栈大小的其他方法
使用 /STACK 链接器选项。
对 .exe 文件使用 EDITBIN。

其他详细解决办法:

设置c++程序的堆栈空间解决栈溢出问题
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。