当我尝试执行项目时出现分段错误。在运行Btree
类的析构函数的main的末尾,它调用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(){};
};
答案 0 :(得分:1)
您是如何分配root
的?我的个人猜测是你用
root = new Node();
如果尝试将非数组对象解除分配为数组对象,则会得到未定义的行为。实际上,它会在节点开始之前使用这个词,并假设它是一个元素计数并破坏了这些元素。因为只有一个这样做不会太好用。你可能想要
delete root;