【发布时间】:2018-11-07 16:51:09
【问题描述】:
头文件包含:
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。谁能给个提示?
【问题讨论】:
-
为什么你显示完整的屏幕,而不仅仅是错误信息?为什么不以文本形式提供错误消息。文字可搜索,图片不可搜索。
-
您的
this指针是nullptr。在nullptrthis上调用成员函数是未定义的行为。错误出现在您未显示的代码中。 -
@WernerHenze 对,我将提供错误文本消息。
-
请edit你的问题告诉我们你做了什么样的调试。我希望您已经在 Valgrind 或类似的检查器中运行了您的minimal reproducible example,并使用诸如 GDB 之类的调试器进行了调查。确保您也启用了全套编译器警告。这些工具告诉了你什么,它们缺少什么信息?并阅读 Eric Lippert 的 How to debug small programs。
-
@TobySpeight 非常感谢。我将研究您提供的链接。我正在使用带有默认设置的 QtCreator 进行调试,而默认设置又使用了
GDB。我想我需要在调试器配置上做一些工作。
标签: c++ qt segmentation-fault