无法删除旧指针(segfault)

时间:2017-12-03 23:34:33

标签: c++

我很困惑为什么其中一个会起作用而另一个不起作用。我试图启用相机控制器的切换,在这两种情况下(大多数)复制构造函数都成功,第一个分支是delete上的分段但是

if (type == controllers::Camera::Type::Arcball) {
    controllers::Camera *old_cam = mController;
    mController = new controllers::ArcballCamera(*old_cam);
    delete old_cam;//!!! this segfaults
    return true;
}
else if (type == controllers::Camera::Type::Fly) {
    controllers::Camera *old_cam = mController;
    mController = new controllers::FlyCamera(mGLFWWindow, *old_cam);
    delete old_cam;
    return true;
}

有没有人对这里发生的事情提出建议?第二个分支工作正常(可以delete old_cam;)。

1 个答案:

答案 0 :(得分:0)

我没有正确关闭FlyCamera中的线程,线程捕获this,这是发生最终段错误的地方。谢谢@aschepler指出本应该显而易见的东西,析构函数是一个问题,应该从一个可以被删除的事实中明显看出,但另一个不可能!