无法删除旧的指针(segfault)

unable to delete an old pointer (segfault)

本文关键字:segfault 指针 删除      更新时间:2023-10-16

我很困惑为什么其中一个会起作用,而另一个会效法。我正在尝试启用相机控制器的切换,在这两种情况下,(主要)复制构造函数都成功了,第一个分支是在 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;)。

i无法正确关闭FlyCamera中的线程,即捕获的 this,这是最终发生的segfault的地方。谢谢@aschepler指出的是应该显而易见的,从一个可以删除的事实中,灾难是应该显而易见的问题,而另一个则不能!