-1

次の C - コードを検討してください。

struct ScoredGamestate
{
    GameState88 gameState;
    int whitePlayerScore; 
};

int bestScore;

assert(scoredState->whitePlayerScore > -1000 && 
scoredState->whitePlayerScore < 1000);

if (scoredState->gameState.playerOnMove == PlayerWhite)
{
    bestScore = scoredState->whitePlayerScore;
}
else
{
    bestScore -(scoredState->whitePlayerScore);
}

assert(bestScore > -1000 && bestScore < 1000);

コードの後、bestScore は常に +/- "whitePlayerScore" であることは論理的です。

しかし、私のデバッガー (visual studio 2010 C++ Express Edition) では、"whitePlayerScore" は 50 ですが、bestScore は -8908234 のようになります。

(最初のアサーションは起動しませんが、常に 2 番目のアサーションは起動します)

これはどのように起こりますか?

4

2 に答える 2

4

さて、これ

bestScore -(scoredState->whitePlayerScore);

文字が欠けているよう=です。私はあなたが割り当てをするつもりだったと思います

bestScore = -scoredState->whitePlayerScore;

代わりに、結果を破棄して無意味な減算を使用しました。ほとんどのコンパイラは、実際には、副作用のない式ステートメントについて警告を発行します。あなたのものではありませんか?

于 2012-11-06T17:46:09.380 に答える
2

行にタイプミスがあります

bestScore -(scoredState->whitePlayerScore);

する必要があります

bestScore = (scoredState->whitePlayerScore);

そのため、初期化されていない(またはガベージ値に初期化された)値int bestScore;があり、これはデバッガーで次のように表示されます。

-8908234

于 2012-11-06T17:46:05.460 に答える