如何避免"无法读取内存"

Tho*_*ees 6 c++

我有一个结构:

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

a * b;
cout << b->c;
Run Code Online (Sandbox Code Playgroud)

有时当我想阅读(例如)c和debbuger时,这个值被调用

'无法读取记忆'

然后我的程序崩溃了.

现在,如何检查该值是否可读?

最好的祝福.

Mik*_*our 8

您尚未初始化指针指向任何内容,因此它无效.通常,您不能测试指针是否指向有效对象.这取决于你确保它做到; 例如:

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

如果你不希望它指向任何东西,你可以使指针为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
Run Code Online (Sandbox Code Playgroud)

但请注意,在指针可能无效但不为null的情况下,这没有用; 也许是因为它没有被初始化,或者因为它指向一个被破坏的物体.

一般情况下,除非你真正需要它们,否则应该避免指针; 当你这样做时,小心不要使用无效指针.如果您只想要一个对象,那么只需使用一个对象:

a b(1,2);     // an object
cout << b.a;  // OK: b is a valid object
Run Code Online (Sandbox Code Playgroud)