深入全面探究有未经处理的异常: 0xC00000FD: Stack overflow(栈溢出)问题!
这两天一直遇到标题上的问题 25e7 ,我相信很多朋友在执行代码的时候都会遇到这样的问题,我在网上也找了很多的资料解决这个问题,虽然有些方法能解决,但是总觉得总结的不是很全面,这里我自己在相对全面的总结一下,如果有不对的地方还请各位看官指正。
首先要交代一下背景情况,我执行的这段代码是别人写的,这段时间是我一直在维护,因为平台不一样,所以读库的方式不一样,我先在liunx的环境下编译了程序,执行都没有问题,可以按照我接口的方式读到数据库的数据。但是我用vs2010的window环境下编译的时候就出现了以下图片的问题。
字面上翻译过来的话就是:栈溢出了。
意思就是你分配的内存太小了,而你程序中有的数据太大,这里导致了栈溢出的情况。
于是我就在网上找资料来查询这个问题,一搜一大堆。
其中普遍的解决方式就是在 属性-》链接器-》系统-》堆栈保留大小和堆栈提交大小 中将数据增加,我这里将这两个数值都改成了16000000。如下图所以:
程序确实是可以运行起来了,但是我在想一个问题,一般我们程序都是使用的默认值,出现这样的问题归根到底的原因是什么呢?
其实还是回到我上面说到的那个问题 堆栈溢出了,vs在程序启动的时候一般分配的堆栈大小是1M的空间,如果你的全局变量或者静态变量有很大的值的话,这里就会出现这样的堆栈溢出的问题。
于是我就在代码里面找是否有较大数据的全局变量,发现了一个宏定义如下图所示:
这个宏定义一下就是1M了,加上其他的一些定义,肯定就超过了1M,如果你是在DEBUG的情况下去调试程序的时候,你会发现连主函数都进不去,因为有全局变量在主函数执行之前就已经栈溢出了,就好像下面这种情况,断点无效。
但是领导那边的要求是程序必须通过命令行的方式编译也要通过,因为客户那边只会操作命令行。
操作命令不难就是在有pro文件的情况下在命令行输入qmake,生成了makefile文件,再执行nmake,生成可执行文件。那么问题来了我用这种方式也执行成功了,也生成了可执行文件exe,但是当我双击exe的时候程序并没有起来,而且没有任何打印信息,这里我想到了可能还是这个栈溢出的问题,pro文件中应该也需要设置一下上面提到的堆栈保留大小和堆栈提交大小。那么在pro文件中如何去设置这两个量呢?
在pro文件中添加上以下两个量就可以了:
QMAKE_CXXFLAGS += /F 16000000
QMAKE_LFLAGS += /STACK:16000000
这个设置跟vs2010上面的设置是一样的,当然大小自己可以定的,我这里还是设置的大小为16000000。
最后总结:
其实把问题都真正弄清楚了再会看一点都不难,但是在处理的过程中感觉还是比较费劲儿的,所有的提示都是比较精准的,最后找其原因还是回到了最本质的问题,我建议的话还是尽量将全部变量的大小设置的小一点,1024*1024就有点大了,我维护的这段代码并不是我写的,所以我还是准从开发的意愿吧。
希望这边文章对大家还是有所帮助 谢谢!!!
- VS2010 0x772415ee 处有未经处理的异常: 0xC00000FD: Stack overflow (栈溢出错误)
- VS2010运行错误:0x010e86c7 处有未经处理的异常: 0xC00000FD: Stack overflow
- c++ :0x00e08b47 处有未经处理的异常: 0xC00000FD: Stack overflow
- 程序运行时会出现 xxxx.exe 中的 0x00fa1c29 处有未经处理的异常: 0xC00000FD: Stack overflow
- 典型中断2:有未经处理的异常: 0xC00000FD: Stack Overflow
- VC 解决 函数调用报错:未经处理的异常: 0xC00000FD: Stack overflow (参数: 0x00000000, 0x06442000)。
- 0x003B8027 处有未经处理的异常(在*.exe 中): 0xC00000FD: Stack overflow (参数: 0x00000000, 0x00252000)
- Opencv内存访问异常问题----0x0097A016 (opencv_highgui2413d.dll)未经处理的异常: 0xC0000005: 读取位置 0x00000018 时发生访问冲突
- 关于vs未处理的异常: 0xC00000FD: Stack overflow
- OpenCV问题集锦,图片显示不出来的问题,cvWaitKey(0),不能读图片,未经处理的异常,等问题集合
- 0x0139B9处有未经处理的异常 0xc0000FD:Stack overflow
- OpenCV问题集锦,图片显示不出来,WaitKey(0),imread()不能读图片,未经处理的异常,等问题集合
- opencv:未经处理的异常、RPC服务器不可用、cv::exception问题
- *.exe 中的 0x0053b1f7 处未处理的异常: 0xC00000FD: Stack overflow
- OpenCV问题集锦,图片显示不出来,WaitKey(0),imread()不能读图片,未经处理的异常,等问题集合
- 用asp.net编写页面,GridView控件中update存在问题,指定的参数已超出有效值的范围。 参数名: index 说明: 执行当前 Web 请求期间,出现未经处理的异常。跪求大佬
- Visual Stdio VS 错误 error : 0xC00000FD: Stack overflow. 更改堆栈空间解决栈溢出问题
- OpenCV问题集锦,图片显示不出来,WaitKey(0),imread()不能读图片,未经处理的异常,等问题集合
- 解决"System.AccessViolationException”类型的未经处理的异常在 未知模块(IIS Worker Process 已停止工作)导致无法连接远程数据库的问题
- XXX.exe 中的 0x77c615de 处未处理的异常: 0xC00000FD: Stack overflow