C++调用大数组出现栈溢出的问题解决方法,堆和栈的完全解析
总结:除非特别要求,不应开一个大于>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。
其他详细解决办法: