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

时间:2018-05-29 06:14:25

标签: 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();
};

get_selected_mesh方法的实现是:

cvas::p3de::Mesh *cvas::p3de::Director::get_selected_mesh()
{
    return selected_mesh;
}

但是我在这一行收到了分段错误:

enter image description here

分段错误错误文本是:

  

下级停止了因为它收到了来自操作的信号   系统

     

信号名称:SIGSEGV

     

信号含义:分段错误

修改代码时,分段错误已解决

cvas::p3de::Mesh *cvas::p3de::Director::get_selected_mesh()
{
    //return selected_mesh;
    return nullptr;
}

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

1 个答案:

答案 0 :(得分:5)

您好像Director* nullptr,然后在该指针上调用get_selected_mesh。这是未定义的行为。

如果您只是return nullptr编译器不关心并且只返回nullptr。在您return selected_mesh的情况下,编译器事实上需要执行return this->selected_mesh。这会取消引用无效的this,从而取消访问违规行为。

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