-8

本当に奇妙なエラーが発生しているようです。基本的に、ピクセル データのディスク キャッシュを管理するためのクラス A があります。メイン プログラムから、次を使用して A のオブジェクトを作成します。

A* obj = new A(...);

次に、ディスクからピクセルを読み取るメソッドを呼び出します。

Pixel pix = obj->read(...);

ただし、"this" ポインターを使用して read() メソッド内から A のプライベート メンバー変数にアクセスしようとすると、"this" ポインターが初期化されていない (MSVC 2012 によって 0xCCCCCCCC に設定されている) ため、アクセス違反エラーが発生します。しかし、コンストラクタが返す「obj」ポインタの値を確認したところ、有効なアドレスのようです。

私の推測では、コンストラクターが何らかの理由で失敗したと思いますが、では、なぜオブジェクトへのポインターを返すのでしょうか? あるいは、コンストラクターが失敗しなかった場合、「this」ポインターがクラス内から初期化されていないのはなぜですか?

4

1 に答える 1

2

Visual Studio C++ では、メモリ割り当ての表現は何ですか? :

  • 0xCCCCCCCC : 初期化されていないスタック メモリをマークするために、Microsoft の C++ デバッグ ランタイム ライブラリによって使用されます。

あなたがする瞬間obj->、あなたobjは初期化されていません。問題の 2 行のコードは実際のコードではないか、間に何か重要なことが起こっています。

デバッガーを使用して単純にステップ実行すると、質問に対する答えが得られます。

考えられる原因の 1 つは、obj関数に 2 つ以上のローカル変数があることです。

于 2013-01-19T22:49:34.520 に答える