void EventCloseServer::act(){
Server* serv = Program()::getServer();
if (serv != NULL) {
if (serv->running()) {
serv->stop();
serv->sync();
}
delete (serv);
}
}
当我两次执行此代码时,就会出现问题。第一次,该函数转到
delete(serv)
好。第二次,它在调用serv->running()
之前和serv != NULL
之后导致分段错误。我不明白为什么第二次执行进入第一个
if
语句。以下内容是否会导致myObject = NULL
是不是真的?Class* myObject = new Class();
/***/
delete(myObject); /* myObject = NULL ? */
最佳答案
不,那不是真的。delete
没有将指针设置为NULL
。它仅释放分配给指针的内存,并调用适当的析构函数。
另一方面,在delete
指针上调用NULL
是No-Op。因此,不需要在调用NULL
之前检查delete
。
请注意,在NULL
之后显式使用delete
指针似乎可以解决您的问题,但可能会在代码中隐藏问题。解决此问题的最佳方法是使用Smart指针而不是需要显式内存管理的原始指针。