簡體   English   中英

細分錯誤已解決,但無法找出原因

[英]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的事實,我無法弄清楚為什么在修改上述代碼時解決了分段錯誤。 誰能給我一個提示?

您似乎有一個為nullptrDirector* ,然后在該指針上調用get_selected_mesh 這是未定義的行為。

在只return nullptr的情況下,編譯器不在乎,而僅返回nullptr return selected_mesh的情況下,編譯器實際上需要return this->selected_mesh 這將取消引用無效的this ,從而取消訪問沖突。

錯誤出現在您未顯示的代碼中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM