考虑以下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
(第一个断言永远不会发射,但总是第二个断言)
这怎么可能发生?
答案 0 :(得分:4)
好吧,这个
bestScore -(scoredState->whitePlayerScore);
似乎缺少=
个字符。我猜你打算做作业
bestScore = -scoredState->whitePlayerScore;
但是你使用了一些无意义的减法和废弃的结果。大多数编译器实际上会发出关于没有副作用的表达式语句的警告。你不是吗?
答案 1 :(得分:2)
你有错误的行
bestScore -(scoredState->whitePlayerScore);
应该是
bestScore =(scoredState-&gt; whitePlayerScore);
这就是为什么你有未初始化(或初始化为垃圾值)的值int bestScore;
,在你的情况下在调试器中看到
-8908234