首页 > 解决方案 > 分段错误已解决,但无法弄清楚原因

问题描述

头文件包含:

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;
}

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

在此处输入图像描述


分段错误错误文本为:

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

信号名称:SIGSEGV

信号含义:分段错误


像这样修改代码时解决了分段错误:

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

好吧,考虑到在头文件中,标识符selected_mesh已经被声明/初始化为nullptr. 谁能给我一个提示?

标签: c++qtsegmentation-fault

解决方案


你似乎有一个Director*nullptr然后你调用get_selected_mesh那个指针。这是未定义的行为。

如果你只是return nullptr编译器不在乎,只是返回nullptr. 如果您return selected_mesh的编译器事实上需要执行return this->selected_mesh. 这取消了无效的引用this,从而取消了访问冲突。

错误出现在您未显示的代码中。


推荐阅读