我今天真的遇到个超奇怪的问题,不知道哪位也遇到过。
编译器是VC++,先看下程序构架,当然是简化了的。
if(x)
{
while(y)
{
if(z)
break;
int i = 0;
}
}
else
{
int j = 0;
int k = 0;
int s = 0;
}问题出现了,在程序执行到 int i = 0时竟然不返回到 while(y)而是跳到else 更奇怪的是在else 主体下执行 int j = 0,接着执行int k = 0;竟又跳到 while(y)处。我后来把while这个循环去掉,当x 为真并执行完if(x)主体后竟又跳到else去执行else的主机,这时x为真.我反复检查大括号的配对,都正确配对。后来我实在是头晕了,虽然这只是一个函数但有300多行代码我只好把以前保存的覆盖它了。
不知道哪位有我这样的经历,实在是很奇怪
编译器是VC++,先看下程序构架,当然是简化了的。
if(x)
{
while(y)
{
if(z)
break;
int i = 0;
}
}
else
{
int j = 0;
int k = 0;
int s = 0;
}问题出现了,在程序执行到 int i = 0时竟然不返回到 while(y)而是跳到else 更奇怪的是在else 主体下执行 int j = 0,接着执行int k = 0;竟又跳到 while(y)处。我后来把while这个循环去掉,当x 为真并执行完if(x)主体后竟又跳到else去执行else的主机,这时x为真.我反复检查大括号的配对,都正确配对。后来我实在是头晕了,虽然这只是一个函数但有300多行代码我只好把以前保存的覆盖它了。
不知道哪位有我这样的经历,实在是很奇怪
解决方案 »
- ctreectrl控件节点当鼠标变成漏斗时如何禁止产生双击消息
- 真心求分析 TCP粘包问题 我有丢包 ,已经困惑通宵了
- 小弟,要做图象放大的毕业设计,过几天要交了,恳求大虾给发个三次样条插值图象放大的原代码,急 !!!先谢过了 邮箱[email protected]
- SDI怎样实现全屏显示
- 基于SDI的单文档多视图怎么做?
- 你们都有 星 了,我怎么还是绿三角呀 怎么长呀
- 各位大哥,谁知道哪里有Windows CE开发包的下载??分数随你拿!!
- 如何解决这个数据库问题
- 关于指针的问题,究竟是什么?
- 征求毕设题目。
- ReadDirectoryChangesW监视文件通知重复。。
- mfcs42.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in mdll.obj错误如何解决?网上的方法都试了不管用!
按alt+f8
看看是否匹配正确
BOOL x,y,z;
x = TRUE;
y = TRUE;
z = TRUE; //z = FALSE;
if(x)
{
while(y)
{
if(z)
break;
int i = 0;
}
}
else
{
int j = 0;
int k = 0;
int s = 0;
}
那现在说什么也白搭
等再出现再说吧
记住alt+f8
while(y)
{
if(z)
break;
int i = 0;
} 在循环中不停地在栈上申请空间给变量i,是不是跟栈溢出有关?
就我的知识水平而言,在C/C++语言中if条件成立后是不可能执行到else里面去的,除非你用goto跳转。
我调试的工程有两个项目,一个exe,一个dll
我修改了dll的代码,并且重新编译,然后开始调试,
但不幸的是,exe调用的还是旧版本的dll,
现象嘛,就是让人觉得vc在胡乱执行
原因为编译器优化导致,即使关了优化开关,还是会做一些默认优化的。不信,你把if else中的代码写成完全没有关系的不同代码。再试就不会出现这种情况了。
————————————————————
同意,
我曾经因为这个打赌输了一百块钱只是VC的IDE调试的问题,从逻辑上讲是不可能的。
只是一个错误的现象。
或者最笨的办法,用debug版本调试