我有一个结构:
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时,这个值被称为
'无法读取内存'
然后我的程序崩溃了。
现在,如何检查该值是否可读?
最诚挚的问候。
答案 0 :(得分: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
如果你不希望它指向任何东西,你可以指针 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