gpt4 book ai didi

c++ - Trie删除不成功

转载 作者:行者123 更新时间:2023-11-30 19:44:26 24 4
gpt4 key购买 nike

我有一个用 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(&current->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;

您不能同时使用deletemalloc,这是未定义的行为。

或者,您可以替换:

delete current->children[i];

free(current->children[i]);

您可能还需要在要删除的内容中写入 null:

if(current->children[i]) {
deleteTrie(&current->children[i]);
delete current->children[i];
current->children[i] = nullptr; // or 0
}

关于c++ - Trie删除不成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28184717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com