为什么我不能在Visual Studio中进入这个循环

时间:2012-12-21 19:33:13

标签: c++

出于某种原因,Visual Studio不会介入此代码,我无法看到变量k和p的内容

           for(int k=0; k<6; k++)
            {
                for(int p=0; p<6; p++)
                {
                    if(k=0)
                    {
                        levelToDraw[k][p] = LevelOne[k][p];
                    }
                    else
                    {
                        levelToDraw[k][p] = LevelOne[k-1][p];
                    }
                }
            }

7 个答案:

答案 0 :(得分:6)

从我所看到的

        for(int k=0; k<6; k++)
        {
            for(int p=0; p<6; p++)
            {
                if(k=0)
                {
                    levelToDraw[k][p] = LevelOne[k][p];
                }
                else
                {
                    levelToDraw[k][p] = LevelOne[k-1][p];
                }
            }
        }

是无限循环,没有可见的副作用,因为k总是在循环内重置为零。 (注意意外分配)。没有可见副作用的无限循环是C ++中未定义的行为。这意味着编译器可以做任何事情。例如,它可以丢弃循环,这意味着你无法输入它 - 这很可能发生了。由于它是未定义的行为,它甚至可能导致机器着火。

答案 1 :(得分:2)

您在此行使用分配而非比较:

 if(k=0)

答案 2 :(得分:2)

考虑升级C4706的警告级别。我不记得确切的编译器开关,但它可能类似于/ W14706。

答案 3 :(得分:1)

我认为你错过了Voo指出的'='

声明必须为if(k==0)

您的处理器比断点分析快得多。当你的代码到达那个循环时,它已经完成,然后才能检查断点停止。如果你停止该循环上面的代码它将工作,但在循环它不会由于处理的速度。尝试在循环中添加睡眠,然后您可以进入循环。

答案 4 :(得分:1)

由于您正在循环文字,因此编译器可能会优化代码。例如,它可以展开循环。

您可以尝试关闭compiler optimizations进行验证。

删除像if (k=0)...这样的决定性事物当然也有帮助。

答案 5 :(得分:0)

我认为你应该if(k==0)

答案 6 :(得分:0)

如果编译器是智能的(k=0)将被优化,并且您无法步入if,至少在指令级别。