c++ 若指针指向的对象不存在了,指针是为空(NULL),还是指向的内存不可访问了?

2024-11-29 00:46:10
推荐回答(5个)
回答(1):

如果是你自己定义的指针变量,如果指向的对象不存在了,该指针就会成为野指针。如果是指向简单变量时,读出的数据是随机的,写操作可能会是程序core掉。如果指向的复杂的对象,例如:
class A{
int a;
}
A* pA = new(A);
如果pA指向的对象不存在了,使用pA->a查看或者赋值就会使程序core掉

回答(2):

针对楼主的疑问,我自己亲自测了下,
在linux下gcc版本4+把原对象delete,他的指针调用不涉及到内存的运行正常,涉及到内存的立马崩溃.在mac os下gcc版本4.6.1原对象delete且指针赋值为空,无论调用啥全部通过.将本地对象delete,赋值为空,调用涉及到内存才崩溃.所以怀疑mac系统对内存有保护机制.
正式回答楼主的问题:指向的对象不存在了,指针肯定不为空,他指向一个地址,但是那块地址里存了什么我们无法预估了.现在我对这种东西的做法是尽量使用单例,对象自己管理起来,一般情况对象是一直存在的,除非一开始都没声明起来.

回答(3):

指针不为空,但访问指向的内存时有可能出错。

回答(4):

delete 后,如果没有显式赋值为NULL,未必会是NULL

回答(5):

访问的话,会出现内存错误