我有一个只有这样的构造函数的类:
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
抽象父类(super class)型的指针。 最佳答案
您是否意外地用未初始化的局部变量遮盖了counter
?
否则,valgrind可能会在已删除的对象(可能使用哨兵值)中进行中间诊断。
或valgrind可能只是错误的。
关于c++ - 初始化程序列表使变量未初始化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3266679/