Ошибка сегмента при удалении пустого указателя C ++ - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть класс, который хранит указатель на объекты других классов как void *, но у меня возникли проблемы с деструктором. Я знаю, что ошибка сегмента от этого деструктора, потому что, когда я добавляю (к первой строке)

 shapeObject = nullptr;

кажется, что оно исчезло, но я не хочу, чтобы произошла утечка памяти.

 ~ShapeElem() {

        if (shapeType == AClass)
            delete static_cast<AClass* >(shapeObject);
        else if (shapeType == BClass)
            delete static_cast<BClass* >(shapeObject);

        shapeObject = nullptr;
    }

Итак, что я могу сделать для удаления этого пустого указателя shapeObject.

Примечание. Поскольку это домашнее задание, я не могу использовать шаблоны для работы с разными классами

Я должен использовать void *.

1 Ответ

0 голосов
/ 18 ноября 2018

Теперь это работает.Я сделал конструктор по умолчанию для ShapeElem, вот так.

ShapeElem(){
     shapeObject = nullptr;
     shapeType = ShapeType::AClass;
 }

Я все еще не уверен, но он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...