一部の変数のウォッチウィンドウ値が「実世界」の値と一致していないように見えるという、非常に奇妙な問題が発生しています。デバッガーが宇宙空間でオフになっているように見えます。これを示す最も小さなコードスニペットは次のとおりです。
printf("%d", pNodes[nNode].nColumn); // watch shows "4"
printf("%d", nColumn); // watch shows "1"
if (pNodes[nNode].nColumn != nColumn)
continue; // this is NOT called
したがって、動作は次のとおりです。
- に時計を追加すると
pNodes[nNode].nColumn
、値が表示されます4
。 - に時計を追加すると
nColumn
、値が表示されます1
。 pNodes[nNode].nColumn != nColumn
ウォッチウィンドウで式を確認すると 、と評価されtrue
ます。continue
ステートメントはスキップされます!printf()
何が起こっているかを確認するための呼び出しを追加しprintf()
、値1
とを出力します1
。これは、コードの「フロー」の方法と一致しているようです(つまり、ステートメントの内部を呼び出しません。continue
if
でメモリを確認することもできます。メモリに&pNodes(nNode].nColumn
は、ウォッチウィンドウに表示されている「誤った」値が表示されます。したがって、デバッガは実際のプログラムデータなどから完全に「切断」されているようです。デバッグビルドの最適化を実行していますがオフになっています。また、pNodeがグローバル変数またはスコープの上位にある他の変数に対応していないことも確認しました。ローカルバージョンしかないようです。
これは私にとって完全に困惑しています!問題を理解するために次にどこに行けばいいのかさえわかりません。何かアイデアがあれば、ぜひ聞いてみてください!
ありがとう!