次のような唯一のコンストラクターを持つクラスがあります。
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 はその行について次のように述べています。
条件付きジャンプまたは移動は、初期化されていない値に依存します
しかし、初期化子リストで初期化しました! そして、私はヴァルグリンドを信じていると思います。なぜなら、すべてがうまくいくこともあれば、何も起こらないこともあるからです....だから、おそらく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
。
2番目の編集:
これが問題になる可能性があります!??
私のGame
クラスでは、次IntroScreen
のように初期化します。
Game::Game() : /* Some other stuff .... */ , view(new IntroScreen(this))`
{}
view
IntroScreen
はここで、呼び出された の抽象スーパータイプへのポインタView
です。