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

Why cant I step into this loop in Visual Studio

本文关键字:循环 Studio 不能 Visual 为什么      更新时间:2023-10-16

由于某些原因,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];
                    }
                }
            }

从我可以看到

        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++中未定义的行为。这意味着编译器可以做任何事情。例如,它可以丢弃循环,这意味着你不能进入它——这很可能就是发生的事情。由于它是未定义的行为,它甚至可能导致机器起火。

您在这一行使用assignemnt而不是比较:

 if(k=0)

考虑提高C4706的警告级别。我记不起确切的编译器开关了,但它可能是/W14706之类的。

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

您可以尝试关闭编译器优化以进行验证。

去除像if (k=0)...这样的行列式当然也有帮助。

我想你错过了Voo 指出的一个'='

该语句必须是if(k==0)

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

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

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