为什么可执行文件在Debug下好用,在Release下不好用?

tds168 2008-03-28 10:07:49
为什么生成debug版本的可执行文件可以正常运行,生成RELEASE版本的可执行文件却提示内存不能为读?
...全文
199 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Peking_beyond 2009-08-31
  • 打赏
  • 举报
回复
注意看warning 还有就是debug对越界不敏感而release却不行,还有warnning里的一些警告也会使release生成的执行文件无法正常运行
tccqs 2008-03-29
  • 打赏
  • 举报
回复
up and mark,,
qiqi5521 2008-03-29
  • 打赏
  • 举报
回复
另外,你还需要考虑以下因素:
1、程序有没有调用DLL,ActiveX控件,或者自己程序目录下的数据、设置文件,检查一下Debug和Release目录下是否都提供了这些文件。
2、是否使用 #ifdef _DEBUG 使得Debug和Release版本代码差异很大,如果有,重点检查这些代码。
qiqi5521 2008-03-29
  • 打赏
  • 举报
回复
Debug编译和Release编译至少有以下区别:
1、Debug的内存分配不是很紧凑,对于指针访问越界有一定的容忍度。Release就不同了
2、Release版本为了优化速度,不对变量(包括数组)执行初始化。Debug则会初始化。

按照线索,往往能找到问题。为了排查问题,建议你先暂时把Release编译速度优化关闭试一下。
检查一下代码,有没有变量没有初始化。把所有Warning解决掉(有一个编译选项“把警告当作错误对待”,建议打开这个选项)。

如果到最后还是不能解决问题,只好借助工具了,参考http://blog.csdn.net/qiqi5521/archive/2008/03/06/2154074.aspx
suterfo 2008-03-29
  • 打赏
  • 举报
回复
将qiqi5521 的答案合起来就差不多了...


但我建议以后写MFC程序最好用Release的,不要用Debug的,免得以后又发现问题再去查,到项目发布的时候再换Release的,哪错也不知道了..
Be_pig 2008-03-29
  • 打赏
  • 举报
回复
可能ASSERT()导致的 ,去函数入口处设断点
ZiSheng 2008-03-29
  • 打赏
  • 举报
回复
估计是内存访问越界
mr.zhoux 2008-03-28
  • 打赏
  • 举报
回复
代码不严谨吧..变量和指针没初始化
zaodt 2008-03-28
  • 打赏
  • 举报
回复

设置断点,找问题大概在哪里;


变量赋初始值。
xiahuan77 2008-03-28
  • 打赏
  • 举报
回复
你的生成的EXE文件调用了DLL,ActiveX没?
如果有的话,务必将这些文件与EXE文件放在一个目录下。
arong1234 2008-03-28
  • 打赏
  • 举报
回复
说明程序有bug(比较多的情况是两种:1。你忽略了一些警告信息,认为他无关大局,实际很重要 2。内存访问越界)

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧