分段故障已解决,但无法弄清楚原因

use*_*291 1 c++ qt segmentation-fault

头文件包含:

class WorkScene;
class Mesh;

class Director
{
private:
    WorkScene *scene            = nullptr; // owner
    Mesh      *selected_mesh    = nullptr; // borrower
public:
    Director(WorkScene *scene);
    ~Director();

    const Mesh *get_selected_mesh() const;
    Mesh *get_selected_mesh();
};
Run Code Online (Sandbox Code Playgroud)

get_selected_mesh方法的实现是:

cvas::p3de::Mesh *cvas::p3de::Director::get_selected_mesh()
{
    return selected_mesh;
}
Run Code Online (Sandbox Code Playgroud)

但是,我在此行收到了分段错误:

在此输入图像描述


分段错误错误文本是:

劣势停止是因为它收到了来自操作系统的信号.

信号名称:SIGSEGV

信号含义:分段故障


修改代码时解决了分段错误,如下所示:

cvas::p3de::Mesh *cvas::p3de::Director::get_selected_mesh()
{
    //return selected_mesh;
    return nullptr;
}
Run Code Online (Sandbox Code Playgroud)

好吧,我无法弄清楚为什么在修改上面的代码时解决了分段错误,考虑到在头文件中,selected_mesh标识符已经被声明/初始化的事实nullptr.任何人都可以给我一个提示吗?

Wer*_*nze 5

你似乎有一Director*说是nullptr,然后调用get_selected_mesh上的指针.这是未定义的行为.

在你只是return nullptr编译器不关心,只是返回的情况下nullptr.在您return selected_mesh编译器事实上需要执行的情况下return this->selected_mesh.这将取消引用无效this,从而取消访问冲突.

错误位于代码中您未显示的位置.