-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

(第一个断言永远不会触发,但总是第二个)

这怎么会发生?

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 回答