我有一个用 C++ 编写的 Trie 程序。删除 Trie 时出现问题。即使代码正在执行删除操作,内存也不会被释放。有人能指出我做错的地方吗?程序不处理从 Trie 中删除单个字符串。下面是删除代码片段。
void deleteTrie(trieNodeT **t) {
if(*t) {
trieNodeT *current = *t;
for(int i=0; i<26; i++) {
if(current->children[i]) {
deleteTrie(¤t->children[i]);
free (current->children[i]);
}
}
}
}
void deleteEntireTrie(trieCDT *t) {
if (t) {
deleteTrie(&t->root);
}
}
以下是完整源代码的链接:
https://ideone.com/xL7bvu
最佳答案
假设这是 C++:
(trieNodeT *) malloc(sizeof(trieNodeT));
应该是:
new trieNodeT;
您不能同时使用delete
和malloc
,这是未定义的行为。
或者,您可以替换:
delete current->children[i];
与
free(current->children[i]);
您可能还需要在要删除的内容中写入 null:
if(current->children[i]) {
deleteTrie(¤t->children[i]);
delete current->children[i];
current->children[i] = nullptr; // or 0
}
关于c++ - Trie删除不成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28184717/