gpt4 book ai didi

C++删除段错误

转载 作者:行者123 更新时间:2023-11-30 01:25:00 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com