我有一个像这样的唯一构造函数的类:
IntroScreen::IntroScreen(Game *game) :
View(game), counter(0.0f), message(-1), continueAlpha(255),
continueVisible(false), screenAlpha(255), fadeIn(false), fadeOut(false)
{
}
在某个方法中,我有这个 if 语句
if (counter > 10.0f)
Valgrind 对那条线说:
条件跳转或移动取决于未初始化的值
但是我在我的初始化列表中初始化了它!我想我相信 Valgrind。因为,有时一切都正确,有时什么也没有发生......所以,可能counter
会得到一个错误的值,所以直到计数器达到 10 需要很长时间。
我已经检查了我使用计数器的代码是否存在一些错误。但我认为你不能用 C++ 语句“取消初始化一个值”......
这些是我使用的所有行(初始化列表除外)counter
:
counter += speed;
counter = 20.0f;
counter += game->getSpeedFactor();
if (counter >= 15.f)
counter = 15.f;
if (counter > 10.0f)
Valgrind 为screenAlpha
.
两个变量都是private
,我没有friend
类....
那么发生了什么?问题可能是什么?
编辑:
我将值打印出来:
在构造函数中,它是正确的:0
在我的方法中,它是垃圾。它打印随机值,例如:
-97298.8...
-106542.2...
print 语句是所有赋值到的方法的第一行counter
。
第二次编辑:
会不会是这个问题!!???
在我的Game
课堂上,我这样初始化IntroScreen
:
Game::Game() : /* Some other stuff .... */ , view(new IntroScreen(this))`
{}
view
IntroScreen
这里是一个指向被调用的抽象超类型的指针View
。