У меня есть класс с единственным конструктором, подобным этому:
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)
И Вальгринд говорит для этой строки:
Условный переход или перемещение зависит от неинициализированных значений.
Но я инициализировал его в своем списке инициализаторов! И я думаю, что я верю Вальгринду. Потому что иногда все идет правильно, а иногда ничего не происходит .... Так что, возможно, 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
классов ....
Итак, что происходит? В чем может быть проблема?
Edit:
Я распечатал значение:
В конструкторе было исправлено: 0
В моем методе это был мусор. Он печатал случайные значения, такие как:
Оператор print является первой строкой метода, в которой находятся все присваивания counter
.
Второе редактирование:
Может ли это быть проблемой !! ??
В моем Game
классе я инициализирую IntroScreen
следующим образом:
Game::Game() : /* Some other stuff .... */ , view(new IntroScreen(this))`
{}
view
- это указатель на абстрактный супертип IntroScreen
, называемый View
.