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
。它只是释放分配给指针的内存并调用适当的析构函数。
另一方面,在 NULL
指针上调用 delete
是无操作。因此在调用 delete
之前不需要检查 NULL
。
请注意,在 delete
之后显式 NULL
指针似乎可以解决您的问题,但它可能会在您的代码中隐藏问题。解决此问题的最佳方法是使用智能指针而不是需要显式内存管理的原始指针。
关于C++删除段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13042602/