我有一个只有这样的构造函数的类:

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在这里是指向IntroScreenView抽象父类(super class)型的指针。

    最佳答案

    您是否意外地用未初始化的局部变量遮盖了counter

    否则,valgrind可能会在已删除的对象(可能使用哨兵值)中进行中间诊断。

    或valgrind可能只是错误的。

    关于c++ - 初始化程序列表使变量未初始化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3266679/

    10-11 22:59
    查看更多