Ошибка сегментации устранена, но не может понять, почему - PullRequest
0 голосов
/ 29 мая 2018

Файл заголовка содержит:

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;
}

Однако я получаю ошибку сегментации в этой строке:

enter image description here


Текст ошибки ошибки сегментации:

Нижний остановлен, так как он получил сигнал от операционной системы.

Имя сигнала: SIGSEGV

Значение сигнала: Ошибка сегментации


Ошибка сегментации устраняется при изменении кода следующим образом:

cvas::p3de::Mesh *cvas::p3de::Director::get_selected_mesh()
{
    //return selected_mesh;
    return nullptr;
}

Ну, я не могу понять , почему ошибка сегментации устраняется при изменении кода, как указано выше, учитывая тот факт, что внутри файла заголовка, идентификатор selected_meshбыл уже объявлен / инициализирован как nullptr.Кто-нибудь может дать мне подсказку?

1 Ответ

0 голосов
/ 29 мая 2018

У вас, похоже, есть Director*, то есть nullptr, и затем вы вызываете get_selected_mesh по этому указателю.Это неопределенное поведение.

В случае, когда вы просто return nullptr, компилятору все равно и просто возвращается nullptr.В случае, если вы return selected_mesh, компилятор де-факто должен сделать return this->selected_mesh.Это разыменовывает недействительный this и, следовательно, нарушение прав доступа.

Ошибка находится где-то в коде, который вы не показываете.

...