C++删除段错误

标签 c++ segmentation-fault

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/

相关文章:

c - strcpy 段错误

c++ - 使用标准 C++ fstream 在串行设备 (/dev/ttyGS0) 上读写?

c++ - 在arm chromebook上编译taskwarrior的未定义引用

c++ - 存在用户定义的移动构造函数/赋值时的隐式复制构造函数

c++ - SPOJ SHPATH - SIGSEGV 错误

访问成员 STL 映射时的 C++ 段错误

c++ - 在 C 或 C++ 中实现 Prolog

c++ - 安装一个库,以便 C++ 编译器可以直接访问它

c - C中二维数组的段错误

C段错误打印二维数组