【转】Visual Stdio VS 错误 error : 0xC00000FD: Stack overflow. 更改堆栈空间解决栈溢出问题
原文见:http://www.cnblogs.com/xiangwengao/archive/2012/03/16/2399888.html
问题
- 给一个程序添加小功能,在debug下能正常运行,在release下就出现内存不能read。
- 调试跟踪找到程序出错的地方,问题出现在对话框创建的过程中ChannelcfgDlg.Create(IDD_SUB_DLG_CHAN_CFG,&m_settingTab);
- 在网上搜索资料,发现程序静态数据量大的时候,有时会出现栈溢出问题,往往是程序还没运行算法,就down掉了.
- 反观程序中这个对话框类中确实定义了大量的数组。http://wuliang20080412.blog.163.com/blog/static/905220552010320018881/
- 在创建包含大数组的类(或数据)时栈溢出,由于系统分配给程序的栈空间太小。
- 在VC++.NET中运行聚类程序,老是说Stack OverFlow, 后来才发现是栈空间太小了。 单单保存100个网页的数据量就比较大了。
Visual Stdio Stack 默认设置
- LINK的/STACK选项
- /STACK :reserve[,commit] 缺省 (对应缺省时的)参数
- reserve : 栈总大小 1M 0
- commit : 程序开始时系统提供的实际内存量 8K 0
问题解答:
方法一 : 不静态分配,用new动态创建,从堆中分配的,堆的空间足够大.
不过记得写析构函数,delete你申请的堆空间。其实这样也挺方便,类结束的时候会自动调用析构函数释放空间。养成"不在栈上定义大数组/大对象"的好习惯很重要,否则再大的栈也会被撑爆的。
当然,如果你不喜欢new,delete的话,还是静态分配(毕竟静态分配有很多好处),那么可以通过改变默认栈空间来解决。
方法二 :STACKSIZE 定义.def文件
语法:STACKSIZE reserve[,commit]
reserve:栈的大小;commit:可选项,与操作系统有关,在NT上只一次分配物理内存的大小
方法三 :设定Visual Stdio 的/STACK 大小
1 VC6.0修改:
打开工程,依次操作菜单如下:Project->Setting->Link,在Category 中选中Output,然后
在Reserve中设定堆栈的最大值和commit。
注意:reserve默认值为1MB,最小值为4Byte;commit是保留在虚拟内存的页文件里面,它设置的较
大会使栈开辟较大的值,可能增加内存的开销和启动时间
。
2 VS2008修改
在 Visual Studio 开发环境中设置此链接器Linker选项
· 右键打开项目的“属性页”对话框。有关详细信息,请参见设置 Visual C++ 项目属性。
· 单击“链接器Linker”文件夹。
· 单击“系统 System”属性页。
· 修改下列任意一个(都该也可以)属性:
· 堆栈提交大小Stack Reserve Size ;
· 堆栈保留大小Stack Commit Size .
【转】Visual Stdio VS 错误 error : 0xC00000FD: Stack overflow. 更改堆栈空间解决栈溢出问题的更多相关文章
- Error 0xC00000FD: Stack overflow 之 更改堆栈保留大小
Stack overflow 顾名思义就是堆栈内存溢出. 一.无限递归 这个要自己仔细检查一下,程序中是否含有无限递归的情况,比如下面这就是无限递归: int function(int x, in ...
- VS2013 堆栈溢出调查(0xC00000FD: Stack overflow)
在调试一个代码时,执行过程中会出现如下错误(0xC00000FD: Stack overflow). 很明显是堆栈溢出了. 网上很多方法,都是通过修改设置工程配置,把堆栈调大一些,如下图. 但是堆栈到 ...
- 0xC00000FD: Stack overflow (parameters: 0x00000000, 0x003E2000).错误
这个错误是“栈溢出”,每个线程的栈空间默认是1MB,局部变量(非静态)都在栈中分配,当使用的局部变量所需空间过多时,就会溢出.你检查一下程序,看看哪些函数中定义了大数组,把大数组改成用new分配,函数 ...
- 深入全面探究有未经处理的异常: 0xC00000FD: Stack overflow(栈溢出)问题!
这两天一直遇到标题上的问题,我相信很多朋友在执行代码的时候都会遇到这样的问题,我在网上也找了很多的资料解决这个问题,虽然有些方法能解决,但是总觉得总结的不是很全面,这里我自己在相对全面的总结一下,如果 ...
- 安装包安装服务,点修复出现的错误”Error 1001:指定的服务已存在“ 解决办法
安装项目下,右键视图->自定义操作,出现安装.提交.回滚.卸载四个文件夹,右键安装,添加自定义操作,选择安装的服务为输出文件 右键安装输出文件->在condition->Not (I ...
- 有未经处理的异常: 0xC00000FD: Stack overflow
将“项目属性.链接器.系统.堆栈保留大小”设大一点比如16000000 这是我在网上找到的答案,很好的解决了我的问题,忘了是哪位大神了,总之,向大神致敬
- stack overflow错误分析
stack overflow(堆栈溢出)就是不顾堆栈中分配的局部数据块大小,向该数据块写入了过多的数据,导致数据越界,结果覆盖了老的堆栈数据. 或者解释为 在长字符串中嵌入一段代码,并将过程的返回地址 ...
- 未处理的异常 stack overflow
今天在编译程序时遇到“0x00e304f7 处有未经处理的异常: 0xC00000FD: Stack overflow”的错误,也就是栈溢出了,google了一下,原来是我申请的一个变量太大了,con ...
- 重学计算机组成原理(六)- 函数调用怎么突然Stack Overflow了!
用Google搜异常信息,肯定都访问过Stack Overflow网站 全球最大的程序员问答网站,名字来自于一个常见的报错,就是栈溢出(stack overflow) 从函数调用开始,在计算机指令层面 ...
随机推荐
- [LeetCode]题解(python):075-Sort Colors
题目来源: https://leetcode.com/problems/sort-colors/ 题意分析: 给定n个颜色,红色,白色和蓝色.分别用0,1,2代替,将这些颜色排序,0在1前,1在2前. ...
- python re(正则模块)
参考文档:http://blog.csdn.net/wusuopubupt/article/details/29379367 ipython环境中,输入"?re",官方解释如下: ...
- 怎么理解angularjs中的服务?
AngularJS中的服务其实就是提供一种方式抽取共用类库 比如说一些工具类方法,我们传统的做法就是自己写个 utility 类,把相关的工具方法填充到utility里面去,最后把utility类放到 ...
- 数据结构之后缀数组suffix array
在字符串处理当中,后缀树和后缀数组都是非常有力的工具,其中后缀树大家了解得比较多,关于后缀数组则很少见于国内的资料.其实后缀是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现,能够实现后缀树的很多 ...
- perl unicode utf-8 \x转换
[root@dr-mysql01 ~]# cat x5.pl use Encode; use JSON; use URI::Escape; use LWP::Simple; my $host = &q ...
- BZOJ 1096
const maxm=1e100; maxn=; ..maxn] of int64; q:..maxn] of longint; n,i,h,t:longint; function calc(j,i: ...
- 在windows系统中安装hadoop
1.安装Cygwin 从http://www.cygwin.com/ 下载cygwin的setup.exe,双击运行: 选择从Internet安装: 设置安装目录: 设置安装包目录: 设置“Inter ...
- HDU1325 &&poj1308 基础并查集
和上一道小希的迷宫差点儿相同,可是在HDU上提交一直WA,POJ过了 HDU的数据太强了吧,强的我感觉数据有问题 题意:输入若干对点,推断是否是一颗树,转化过来也就是是否存在环 点数-边数=1,还要推 ...
- HDU-4866-Shooting(函数式线段树)
Problem Description In the shooting game, the player can choose to stand in the position of [1, X] t ...
- 最简单的javascript 竖向菜单
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> ...