如何避免"unable to read memory"

How to avoid "unable to read memory"

本文关键字:read memory to unable 何避免      更新时间:2023-10-16

我有一个结构:

struct a {
   a(){};
   a(int one,int two): a(one),b(two){};
   int a;
   int b;
   int c;
}
a * b;
cout << b->c;

有时,当我想读取(例如)c时,在debbuger中,这个值被称为

"无法读取内存"

然后我的程序崩溃了。

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

谨致问候。

您没有初始化指针以指向任何内容,因此它是无效的。通常情况下,您无法测试指针是否指向有效对象。这取决于你是否能做到;例如:

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