Ошибка сегментации в деструкторе - PullRequest
0 голосов
/ 08 января 2012

Я получаю ошибку сегментации, когда пытаюсь выполнить свой проект.В конце main, где запускается деструктор класса Btree, он вызывает деструктор класса Node.Затем в вызове деструктора класса Word я получаю ошибку.И list.tcc открывает (~Btree -> ~Node() -> ~Word() (error): list.tcc:)

Курсор выдает ошибку в этой строке:

list.tcc:

_Node* __cur = static_cast<_Node*>(this->_M_impl._M_node._M_next);

Является ли причиной этой ошибки список в Word класс?

Коды классов, сокращенно обозначенные ниже:

class Btree{
private:
...
Node *root;
...
public:...
~Btree(){delete[] root;};

};

class Node{
...
Word *words;
Node **children;
...
    ~Node(){delete [] words; delete []children;};
};

class Word{
public:
string word;
list<Couple> couple;

    Word(){};
    ~Word(){};
};

class Couple{
...
public:
....
    ~Couple(){};
 };

1 Ответ

1 голос
/ 08 января 2012

Как вы распределили свой root?Мое личное предположение состоит в том, что вы выделяете его с помощью

root = new Node();

Если вы попытаетесь освободить объект, не являющийся массивом, как объект массива, вы получите неопределенное поведение.Практически, это займет слово прямо перед началом вашего узла и предположит, что это количество элементов и уничтожит это количество элементов.Так как есть только один, это не должно работать слишком хорошо.Вы, вероятно, хотите

delete root;
...