C++中的空指针

use*_*392 1 c++ pointers

关于指针,我有几个问题.第一:

 ObjectType *p; 
 p->writeSomething();
Run Code Online (Sandbox Code Playgroud)

为什么在指针尚未初始化时可以在对象上调用方法?如果我运行该代码,我会在控制台窗口中获得"writeSomething()"的输出.第二:

ObjectType *p;
if(p==NULL) 
cout<<"Null pointer";//This is printed out
p = new ObjectType;
delete p;
if(p==NULL)
   cout<<"Null pointer";
else
   cout<<"Pointer is not null";//This is printed out
Run Code Online (Sandbox Code Playgroud)

为什么第二个if语句中的指针不为null,如何检查指针是否指向任何内存地址?我还想知道是否有任何方法可以检查程序执行完毕后是否还没有释放某些内存.例如,如果您忘记在代码中写入1个删除语句.

Luc*_*ore 7

第一个代码是未定义的行为,任何事情都可能发生,甚至出现在工作中.它可能正在工作,因为静态解决了调用,并且您没有访问该类的任何成员.

对于第二个片段delete没有设置指针NULL,它只是释放内存.指针现在悬空,因为它指向你不再拥有的记忆.

  • @ user1163392取决于.有时,您不必,但大多数情况下,如果必须使用指针,是的,将它们设置为NULL.但尽可能尝试使用智能指针. (2认同)