[英]The segmentation fault is resolved, but cannot figure out why
头文件包含:
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
的事实,我无法弄清楚为什么在修改上述代码时解决了分段错误。 谁能给我一个提示?
您似乎有一个为nullptr
的Director*
,然后在该指针上调用get_selected_mesh
。 这是未定义的行为。
在只return nullptr
的情况下,编译器不在乎,而仅返回nullptr
。 在return selected_mesh
的情况下,编译器实际上需要return this->selected_mesh
。 这将取消引用无效的this
,从而取消访问冲突。
错误出现在您未显示的代码中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.