Release版的控制台程序关闭时提示“已停止工作”

来源:互联网 发布:淘宝盗版商品是啥意思 编辑:程序博客网 时间:2024/06/05 08:14

编译环境:VS2013
问题描述:在写好程序后,调试无误,把发布方式从Debug改成了Release,再测试时,关闭的时候会卡顿,然后出现提示“XX.exe已停止工作”。
测试1:
1. 删除main中所有内容,只留下一个暂停函数,提示消失
2. 将声明内容加入,提示消失
3. 将输入内容部分加入,提示出现
初步分析:
通过测试,发现在非程序最后一个system(“pause”)处退出程序时就会出现提示。此时可以通过写一个安全退出选项,避免直接右上角来解决问题,但这样依然没有找到错误根源。
测试2:
1.删除头文件至只有iostream,提示消失
2.反复放出头文件,发现是某一个头文件导致的问题,在该头文件中声明了某个类的全局变量,删除该全局变量后,提示消失。
3.恢复该全局变量,删除其析构函数,提示消失
4. 恢复其析构函数,将其内容改为输出字符串,提示出现
5. 清空析构函数,改为赋值计算等语句,提示消失
分析:
全局变量在程序通过Windows关闭时,会调用其析构函数,析构函数如果进行io操作,会导致程序关闭错误,这就是发生的条件,不知其原因。至于为什么Debug版本不会出错,是因为Debug时是由编译器调用运行,而Release时是操作系统。

总结解决方法:
1. 不要在析构函数中写IO程序
2. 使用专门的退出功能安全退出程序
3. 使用MFC

0 0