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が指摘したように、「=」を1つ見逃したと思います

ステートメントは if(k==0)

プロセッサは、ブレークポイント分析よりもはるかに高速です。コードがそのループに到達すると、ブレークポイント停止をチェックする前に既に完了しています。そのループの上でコードを停止すると機能しますが、ループでは処理速度が原因で機能しません。ループにスリープを追加しようとすると、ループにステップインできる場合があります。

于 2012-12-21T19:38:07.453 に答える
1

リテラルをループしているため、コンパイラはコードを最適化していない可能性があります。たとえば、ループを展開している可能性があります。

コンパイラの最適化をオフにして確認できます。

などの決定的なものを削除することif (k=0)...も確かに役立ちます。

于 2012-12-21T19:38:29.740 に答える
0

私はあなたが結ぶべきだと思いますif(k==0)

于 2012-12-21T19:35:10.533 に答える