C++ 分段错误已解决,但无法找出原因

C++ 分段错误已解决,但无法找出原因,c++,qt,segmentation-fault,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_se

头文件包含:

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\u selected\u 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;
}

嗯,考虑到在头文件中,
所选的网格
标识符已经声明/初始化为
nullptr
,我无法理解在修改上述代码时,分段错误被解决的原因。有人能给我一个提示吗?

你好像有一个
控制器*
,它是
nullptr
,然后你在指针上调用
get\u selected\u mesh
。这是未定义的行为

如果您只是
返回nullptr
,编译器不会在意,只会返回
nullptr
。如果
返回选定网格
,编译器实际上需要执行
返回此->选定网格
。这将取消对无效的
This
的引用,从而取消访问冲突


错误在代码中的某个地方,您没有显示。

您似乎有一个
控制器*
,它是
nullptr
,然后您在该指针上调用
get\u selected\u mesh
。这是未定义的行为

如果您只是
返回nullptr
,编译器不会在意,只会返回
nullptr
。如果
返回选定网格
,编译器实际上需要执行
返回此->选定网格
。这将取消对无效的
This
的引用,从而取消访问冲突


错误在代码中的某个地方,您没有显示。

为什么要显示整个屏幕而不仅仅是错误消息?为什么不以文本形式提供错误消息。文本可搜索,图像不可搜索。您的
指针为
nullptr
。在
nullptr
上调用成员函数这是未定义的行为。错误在代码中的某个地方,您没有显示。@WernerHenze好的,我将提供错误文本消息。请回答您的问题,告诉我们您进行了什么样的调试。我希望您已经在Valgrind或类似的检查器中运行了自己的代码,并且已经使用诸如GDB之类的调试器进行了调查。确保还启用了一整套编译器警告。这些工具告诉了你什么,它们遗漏了什么信息?读埃里克·利珀特的。@TobySpeight非常感谢。我将研究你提供的链接。我正在使用默认设置对QtCreator进行调试,然后使用
GDB
。我想我需要处理一下调试器的配置。为什么要显示整个屏幕而不仅仅是错误消息?为什么不以文本形式提供错误消息。文本可搜索,图像不可搜索。您的
指针为
nullptr
。在
nullptr
上调用成员函数这是未定义的行为。错误在代码中的某个地方,您没有显示。@WernerHenze好的,我将提供错误文本消息。请回答您的问题,告诉我们您进行了什么样的调试。我希望您已经在Valgrind或类似的检查器中运行了自己的代码,并且已经使用诸如GDB之类的调试器进行了调查。确保还启用了一整套编译器警告。这些工具告诉了你什么,它们遗漏了什么信息?读埃里克·利珀特的。@TobySpeight非常感谢。我将研究你提供的链接。我正在使用默认设置对QtCreator进行调试,然后使用
GDB
。我想我需要对调试器配置进行一些工作。