我正在使用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];
}
}
}
任何帮助将不胜感激,谢谢!
答案 0 :(得分:0)
children
数组未初始化,因此数据将是随机垃圾并尝试删除未定义的行为,并且可能会崩溃。
在delete node
中调用deleteChildren
是错误的,因为它会导致递归析构函数调用(就像在析构函数中调用delete this
一样)。
可能还有其他问题。我看起来并不广泛。