我今天真的遇到个超奇怪的问题,不知道哪位也遇到过。
编译器是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多行代码我只好把以前保存的覆盖它了。
不知道哪位有我这样的经历,实在是很奇怪

解决方案 »

  1.   

    选择该段落
    按alt+f8
    看看是否匹配正确
      

  2.   

    还有这等奇事,,不过在我这里没发现什么
    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;  
    }
      

  3.   

    ....
    那现在说什么也白搭
    等再出现再说吧
    记住alt+f8
      

  4.   


    while(y) 
     { 
      if(z) 
       break; 
      int i = 0; 
     } 在循环中不停地在栈上申请空间给变量i,是不是跟栈溢出有关?
      

  5.   

    看来你对自己还满自信的,那还来问什么,不是消遣人吗?
    就我的知识水平而言,在C/C++语言中if条件成立后是不可能执行到else里面去的,除非你用goto跳转。
      

  6.   

    我遇到过。
    我调试的工程有两个项目,一个exe,一个dll
    我修改了dll的代码,并且重新编译,然后开始调试,
    但不幸的是,exe调用的还是旧版本的dll,
    现象嘛,就是让人觉得vc在胡乱执行
      

  7.   

    嘿嘿我说不是代码有问题了。我正是修改了dll,但主程式我不管也不懂。
      

  8.   

    可能是你的条件有问题,除了x之外,还有多于两种情况出现,所以else也执行到了。
      

  9.   

    这类问题我也遇到过。不是程序问题,而是源代码和实际执行代码不匹配。
    原因为编译器优化导致,即使关了优化开关,还是会做一些默认优化的。不信,你把if else中的代码写成完全没有关系的不同代码。再试就不会出现这种情况了。
      

  10.   

    pdb文件没更新,导致行错了
    ————————————————————
    同意,
    我曾经因为这个打赌输了一百块钱只是VC的IDE调试的问题,从逻辑上讲是不可能的。
    只是一个错误的现象。
      

  11.   

    不结贴的楼主我见的多了像楼主这样要遇到和自己遇到同样问题的结贴的,我还是头一回见简单点说,你运行的程序的调试符号和代码不匹配按1楼说的,如果你编的不是debug版,必须关掉优化再调试
    或者最笨的办法,用debug版本调试
      

  12.   

    如果说是pdb文件引起的,那么删除pdb所在目录的所有文件重新编译就可以解决掉这样问题吗。