头文件包含:
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
。谁能给我一个提示?
答案 0 :(得分:5)
您好像Director*
nullptr
,然后在该指针上调用get_selected_mesh
。这是未定义的行为。
如果您只是return nullptr
编译器不关心并且只返回nullptr
。在您return selected_mesh
的情况下,编译器事实上需要执行return this->selected_mesh
。这会取消引用无效的this
,从而取消访问违规行为。
错误位于您未显示的代码中。