如何解决C、C++中stack overflow问题
来源:互联网 发布:java项目描述怎么写 编辑:程序博客网 时间:2024/06/05 20:42
转自:http://wenku.baidu.com/link?url=qQJbEF8-tiu-ijhjkn-SMv71Yv9zyYqvo67xVz570nPZsgpzmFupIticPO0hhAuB_JQKsbymsl57uMO7J44vzaJXgMgOLN_T4Gqr1oNMkFq
如何解决C/C++中stack overflow问题
一般遇到这个问题,有两个常见的情况,一个是存在函数的递归调用,另一个是函数中定义了一个较大的数组或者别的变量。
1、在函数的递归调用中,函数中定义的局部变量所占的空间要直到递归结束才能被释放,这样函数不停的递归,堆栈早晚会被用完,解决这一问题的办法是在递归函数中每次动态的分配变量的内存,在使用结束的时候释放内存。遇到这种情况更改堆栈的最大空间大小是没有用的,要从代码的优化入手。下面以二维数组的动态分配为例:
p=new double*[1000]; for (int m=0;m<1000;m++) {
p[m]=new double[5000]; } for(int n=0;n<1000;n++) { delete[] p[n]; } delete[] p;
2、堆栈的大小只有1M,如果在函数中定义了一个占用内存比较大的变量,那么也会导致堆栈溢出。这种情况只需在定义的时候定义为静态变量就行了,因为静态变量是不占用堆栈内存的。如:
void main() { int a[10010010]; }
在函数内定义的变量默认auto类型,也就是栈变量,运行时使用的是栈空间,函数结束后自动清理返回内存。这里在函数内定义如此大的一个数组,已经超过了单个函数可使用的最大栈空间,所以也会提示stack overflow。解决办法是将其定义为static int型的静态变量,这样就不占用栈空间了。
void main() { static int a[10010010]; }
3、除此之外还可以通过修改堆栈的最大空间来解决问题,把project设置里的堆栈加大就可以了,默认是1M,你可以加大到10M试试. 具体如下:project-> setting-> link: 在category里选择output,在stack的Reserve里输入0x10000000试试。对于遇到这样的问题建议从代码方面去解决,不要盲目的依靠修改堆栈空间来解决,毕竟有的问题靠修改空间是解决不了的,如递归中产生的stack overflow。
- 如何解决C、C++中stack overflow问题
- 如何解决C/C++中stack overflow问题
- 如何解决C/C++中stack overflow问题
- 如何解决C/C++中stack overflow问题
- C/C++中stack overflow问题
- C++/CLI Stack Overflow Error
- 如何解决 a+b >c 和 a*b 和 a-b 的 integer overflow 问题
- 解决stack overflow栈溢出问题!
- vs2015中stack overflow错误的解决
- VS中出现Stack overflow的问题
- 解决Stack Overflow
- stack overflow 的解决
- 解决Stack Overflow
- 《转》解决 Stack Overflow
- 解决Stack Overflow .
- 解决Stack Overflow
- Visual Studio 2005中,关于堆溢出(Stack overflow)问题的解决
- stack overflow问题
- 基于树莓派和安卓客户端的移动监控系统
- mysqlbinlog can not parse row based events
- hadoop下运行实例wordcount
- C#基础知识复习3:装箱、拆箱-文件操作-对象序列化
- 记事本
- 如何解决C、C++中stack overflow问题
- 黑马论坛--异常中catch代码块中有return时finally是怎么执行的讨论
- 数据结构拾遗(2) --红黑树的设计与实现(中)
- 代理模式与动态代理
- 算术运算符与表达式的综合运用
- LVS介绍
- C#正则表达式
- 一些VC的快捷键以及调试技巧
- 大数据实时处理:百分点实时计算架构和算法