今天又遇到"stack overflow"的问题,让我和一个同事头痛了好半天。

问题描述:VC++写的COM模块(ATL),用Delphi做客户端调用,运行时报"stack overflow"的错误,调试发现此错误是在执行COM中一个函数入栈的时候发生的。

栈溢出!乍一眼还觉得挺吓人的,没什么经验,是头一次遇到这样的问题。堆栈的知识我不是很懂,只知道要执行的东西先要压入栈中,既然报了溢出,就说明东西太大了,容器装不下了。那到底是什么东西太大了呢?看来看去突然发现,这个出问题的函数一共写了有1000多行,天啦!

把函数体拆分开!当时首先是这样想的,但马上发现,不好拆,因为整个函数体里就是一个大大大大大的switch...case...分支流程,要是把每个case下的内容拆出来单独写成函数再调用,这个工作量太大。还是先想想其它出路……

东西大了,从另一面来讲不就是容器(栈)小了吗?不把这个东西变小,如果能把容器变大也应该能解决吧!要把栈变大,于是打开菜单Project(项目)->XXX Property(属性),在Linker(链接器)->System(系统)里找到Stack Reserve Size(堆栈保留大小)和Stack Commit Size(堆栈提交大小)两个选项,马上把这两个值设置成足够大,测试——结果依然报错。-_- !

继续思考,发现在调试时,错误消息是直接弹出来的,而VS的调试环境并没有事先捕获到。因为是用Delphi的程序在调用COM,那这样看来,应该到Delphi中去找找原因。同样,找到Project->Options->Linker->Max stack size,把这个值改大一些。果然!运行成功没有报错了!再回到VS把刚才改过的两处设置改回原默认值,仍然没有报错,看来瓶颈问题出在Delphi上。

以上小小心得,探究问题与解决问题的思路,自己做个笔记,也求与大家分享!

解决stack overflow栈溢出问题!相关推荐

  1. 深入全面探究有未经处理的异常: 0xC00000FD: Stack overflow(栈溢出)问题!

    深入全面探究有未经处理的异常: 0xC00000FD: Stack overflow(栈溢出)问题! 参考文章: (1)深入全面探究有未经处理的异常: 0xC00000FD: Stack overfl ...

  2. 笔记:Stack overflow栈溢出

    在函数递归中,当实现一个最简单的函数递归,如下: int main(){printf("hello");main(); return 0; } 在上述代码块中,main函数中打印完 ...

  3. Stack overflow (CVF, IVF)

    解决Stack overflow错误: compag visual fortran : project settings|link|output|stack allocations 下有 reserv ...

  4. Stack OverFlow 正确的使用姿势(快速访问、优雅搜索)

    Stack Overflow是一个与程序相关的IT技术问答网站,据说99.9999%的问题都能在这里找到答案,所以想在程序员的路上越走越快,尽早开上跑车,这个利器是必须要掌握的. Stack Over ...

  5. Error:stack overflow分析

    函数的栈空间是用于存放局部变量.函数返回地址以及函数参数等数据的内存区域,其大小是有限制的(VC6默认1M). 局部变量占用空间太大或者函数的调用层次太深就会出现"stackoverflow ...

  6. Visual Stdio VS 错误 error : 0xC00000FD: Stack overflow. 更改堆栈空间解决栈溢出问题

    Visual Stdio VS 错误 error : 0xC00000FD: Stack overflow. 更改堆栈空间解决栈溢出问题 参考文章: (1)Visual Stdio VS 错误 err ...

  7. 解决:Unhandled exception in XX.exe: 0xc00000FD; Stack Overflow

    今天遇见这个问题,就简单记一下.参考了不少文档.博客,终于解决了问题.其实说起来问题也比较简单,就是在运行时在出错的地方卡住,并没有提示任何错误.在Debug时错误信息为:Unhandled exce ...

  8. 如何解决C/C++中stack overflow问题

    一般遇到这个问题,有两个常见的情况,一个是存在函数的递归调用,另一个是函数中定义了一个较大的数组或者别的变量.  1.在函数的递归调用中,函数中定义的局部变量所占的空间要直到递归结束才能被释放,这样函 ...

  9. Vs定义超大数组时,stack OverFlow的解决方法

    定义超大数组时,stack OverFlow的解决方法,当然了这里的数组不仅仅是int,char,double等内置类型,还可以是其他的类,如CString,CButton,CMap等. stack ...

最新文章

  1. 《iOS9开发快速入门》——导读
  2. R构建对数回归模型(Logarithmic Regression)
  3. linux 网络监控指标,Linux监控一些指标
  4. 批处理之显示隐藏文件
  5. 【渝粤教育】广东开放大学 社会调查与方法 形成性考核 (35)
  6. java 如何判定消息已在队列_【05期】消息队列中,如何保证消息的顺序性?
  7. 消费金融盈利分析及风控能力建设
  8. 推荐系统实战第一部分 协同过滤
  9. UITapGestureRecognizer 的用法
  10. Python自动化(十二):一分钟搞定几百个Excel中查找的数据
  11. 电脑重装系统记事本打不开提示无法启动此应用程序怎么办
  12. arctan查表法_DSP正弦波——查表法原理
  13. C语言画图形(图形库graphics的使用)
  14. 【微信小程序】表单验证WxValidate.js使用
  15. DevTools 无法加载源映射:无法加载chrome-extension://ncennffkjdiamlpmcbajkmaiiiddgioo/js/xl-content.js.map 的内容
  16. 江西伟人系列第三篇:唐宋八大家(欧阳修)
  17. PHP网页代理cc攻击无需对接版源码
  18. 用python爬小说_使用python+Scrapy爬小说
  19. proxychins+ssh使用socks5代理
  20. DL4J中文文档/开始/Eclipse DL4J示例之旅

热门文章

  1. 关于戴尔电脑物理内存(灵越7590)
  2. 博客网页代码块渲染-显示行号,一键复制,全屏显示,mac风格(基于mavon-editor或wangEditor)
  3. VsCode使用笔记【1】Ubuntu+vscode+Monokai+修改主题中的字体颜色
  4. php+flash头像上传组件
  5. java.beans.transient_JavaBeans程序开发
  6. Windows 之 win SMB(smb) 功能的开启设置和使用的简单说明
  7. zabbix离线驱动盘安装
  8. 【微信小程序】开发入门篇(一)
  9. Python扫码登录保存和验证cookies值——网易云音乐篇(九)
  10. word与spoolsv.exe占CPU过高