0

出于某种原因,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];
                    }
                }
            }
4

7 回答 7

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

于 2012-12-21T19:42:03.167 回答
2

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

 if(k=0)
于 2012-12-21T19:34:48.720 回答
2

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

于 2012-12-21T19:54:21.353 回答
1

我认为您错过了 Voo 指出的一个“=”

该声明必须是 if(k==0)

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

于 2012-12-21T19:38:07.453 回答
1

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

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

删除诸如此类的决定性因素if (k=0)...当然也会有所帮助。

于 2012-12-21T19:38:29.740 回答
0

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

于 2012-12-21T19:35:10.533 回答
0

如果编译器很聪明(k=0),就会被优化出来,并且你不能进入if. 至少在指令级别。

于 2012-12-21T19:36:40.890 回答