紧急求助,VC在DEBUG 环境下和在 RELEASE 下得到的结果怎么会不一样呢?

500sea 2005-08-29 02:04:27
各位大虾,

我的一个程序,先是把 SET ACTIVE CONFIGURATION 设为DEBUG,经过调试,程序通过,结果正确.然后我就把它改为RELEASE,希望得到一个可执行文件,在DOS下运行.可是同样的程序,数据没有丝毫的改动,结果却截然不同.在RELEASE下得到的答案明显是错误的.我无法想象是什么地方有错误.请各位大虾援手,在下感激不尽!谢谢!
...全文
134 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hell811 2005-09-09
  • 打赏
  • 举报
回复
小耳牛强人,楼主说的PROJECT的SETTING里面有一个OPTION怎么找不到啊?
hell811 2005-09-09
  • 打赏
  • 举报
回复
试着运行一下小耳牛的程序
500sea 2005-09-09
  • 打赏
  • 举报
回复
谢谢大家.我请了一个大牛看了一下,很奇怪的是他把PROJECT的SETTING里面有一个OPTION改动一下,原来是MAXIMIZE后来改成DEFAULT就可以运行了,而且结果还是对的,我不知道为什么,我想是不是就向小耳牛说的,MAXIMIZE下面是优化了,但是DEFAULT下就没有优化,所以结果是对的呢?很想贴代码,可是程序太大了,不知道贴那个部分.真是非常感谢大家,说的如此透彻!
qinxiaogang 2005-08-30
  • 打赏
  • 举报
回复
多半是某个变量没有初始化!! 特别是if()语句里的
DEBUG下的变量都初始化为0xcc了.
yanshine 2005-08-29
  • 打赏
  • 举报
回复
我先举个例子:
void main()
{
int i = 0;
i = ++i + ++i + ++i;
}
如果用Debug版i的最终值为7
如果用Release版i的最终值为9
为什么呢??
看下面:(这是Debug版对i = ++i + ++i + ++i是汇编,(dword ptr [ebp-4]你可以认为就是i)
mov eax,dword ptr [ebp-4] ;先把i放入eax
add eax,1 ;eax = eax+1;
mov dword ptr [ebp-4],eax ;i = eax,到这里第一个i++做完了
mov ecx,dword ptr [ebp-4] ;把i放入eax
add ecx,1 ;eax = eax+1;
mov dword ptr [ebp-4],ecx ;i = eax,到这里第二个i++做完了,这时i = 2
mov edx,dword ptr [ebp-4] ;
add edx,dword ptr [ebp-4] ;然后就把两个2相加,放在edx中
mov eax,dword ptr [ebp-4] ;然后取i
add eax,1 ;
mov dword ptr [ebp-4],eax ;i = i + 1则i = 3
add edx,dword ptr [ebp-4] ;这时用edx+i = 7
mov dword ptr [ebp-4],edx ;把7放回i
所以此过程就将原式变为了,i = 2 + 2 + 3 = 7了.(是两个数两个数的取)
如果是Release版就会将其优化成做完三个++i,然后再加,就变成了i = 3 + 3 + 3 = 9了.
由此可见只能自己注意了,不要写这种有歧义的代码.

贴点代码上来,大家帮你分析分析.
xiao_xiao_zi 2005-08-29
  • 打赏
  • 举报
回复
代码
500sea 2005-08-29
  • 打赏
  • 举报
回复
忘记说了,我是用MICROSOFT VISUAL C++写的一个C 程序

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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