析构函数中的分段错误

时间:2012-01-07 21:46:13

标签: c++ list segmentation-fault destructor

当我尝试执行项目时出现分段错误。在运行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(){};
 };

1 个答案:

答案 0 :(得分:1)

您是如何分配root的?我的个人猜测是你用

分配它
root = new Node();

如果尝试将非数组对象解除分配为数组对象,则会得到未定义的行为。实际上,它会在节点开始之前使用这个词,并假设它是一个元素计数并破坏了这些元素。因为只有一个这样做不会太好用。你可能想要

delete root;