0

重複の可能性:
クラスの未定義/初期化されていないデフォルト値

かなり頻繁に作成および破棄される C++ のクラスがあります。デバッグのために、#ifdef で有効にしたい bool mDebug をクラスに追加しました。ただし、ifdef が定義されていない場合でも、デバッグ変数に関連するメッセージが表示されることを発見しました。コンストラクターで値をダンプすると、ランダムな値 (35、68 など) があることがわかりました。そのため、ある種のメモリ リークがあり、既に使用されているメモリがクラスに割り当てられていると想定します。ただし、浄化を実行しましたが、その時点で読み取られた初期化されていないメモリや範囲外の書き込みは表示されていません。valgrind もあまり役に立ちませんでした。さまざまな理由から、gdb はこのコードではうまく機能しません。変数のアドレスをダンプできますが、他のアイデアはありますか?

ありがとう

4

1 に答える 1

1

bool mDebugクラスに追加された""は静的メンバーではないと想定しています。これは、(自動的に)ゼロに初期化されるためです。したがって、「通常の」データメンバーである必要があると思います。

つまり、初期値を「ベース/メンバー初期化子リスト」で設定したり、コンストラクター本体で明示的に設定したりしなかったということです(#ifdefメンバー定義はでラップされているため、どちらもでラップします#ifdef)。

メンバーはデフォルトではゼロに設定されていません(明示的に行う必要があります)。本当に奇妙なことが起こっていない限り、それがメモリリーク/エラーであるとは思えません。

于 2011-05-26T17:01:09.347 に答える