Trie树中的Trie节点的析构函数

时间:2017-12-03 01:15:21

标签: c++ data-structures segmentation-fault

我正在使用TrieNode结构创建Trie的实现,TrieNode结构是一个单独的节点,TrieSet类是完整的树。这是我的TrieNode的签名:

struct TrieNode {
    TrieNode(bool in, TrieNode *p);
    ~TrieNode();
    void deleteChildren(TrieNode *node);
    bool isLeafNode();

    bool inSet;
    TrieNode *parent;
    TrieNode *children[30];
};

我正在尝试定义析构函数,它首先递归删除所有子节点,然后最终删除节点,但是我遇到了分段错误。这是我的构造函数,析构函数及其辅助函数的代码:

TrieNode::TrieNode(bool in, TrieNode *p)
{
    inSet = in;
    parent = p;
}

TrieNode::~TrieNode()
{
    for(int i = 0; i < 30; i++)
    {
        if(children[i] != nullptr)
        {
            delete children[i];
        }
    }
}

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

children数组未初始化,因此数据将是随机垃圾并尝试删除未定义的行为,并且可能会崩溃。

delete node中调用deleteChildren是错误的,因为它会导致递归析构函数调用(就像在析构函数中调用delete this一样)。

可能还有其他问题。我看起来并不广泛。