1. ホーム
  2. c++

[解決済み] "メモリが読めない "を回避する方法

2022-02-25 21:31:36

質問

構造体があります。

struct a {
   a(){};
   a(int one,int two): a(one),b(two){};
   int a;
   int b;
   int c;
}

a * b;
cout << b->c;

そして、時々、読みたくなる(例)。 c という値で、デバッガではこの値は

<ブロッククオート

'unable to read memory'

その後、私のプログラムはクラッシュしました。

さて、ではその値が読めるかどうかをチェックするにはどうしたらいいでしょうか?

よろしくお願いします。

解決方法は?

ポインターが何かを指すように初期化していないので、無効です。一般に、ポインタが有効なオブジェクトを指しているかどうかをテストすることはできません。ポインタが有効なオブジェクトを指しているかどうかを確認するのは、あなた次第です。

a obj(1,2);    // an object
a * b = &obj;  // a pointer, pointing to obj;
cout << b->a;  // OK: b points to a valid object

ポインターを作ることができます ヌル を指し示す必要がない場合。しかし、NULLポインタをテストすることは可能です。

a * b = nullptr;     // or 0, in ancient dialects
if (b) cout << b->a; // OK: test prevents dereferencing
cout << b->a;        // ERROR: b is null

しかし、ポインタが初期化されていなかったり、破棄されたオブジェクトを指していたりして、NULLではないが無効であるような状況では役に立ちませんので、ご注意ください。

一般に、ポインターは実際に必要なとき以外は避け、必要なときに無効なポインターを使わないように注意しましょう。また、ポインターを使用する場合は、無効なポインターを使用しないように注意してください。

a b(1,2);     // an object
cout << b.a;  // OK: b is a valid object