c++ - Trie删除不成功

标签 c++ c data-structures

我有一个用 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/

相关文章:

c - GCC 编译器警告 : assignment makes pointer from integer without a cast

c++ - libcurl 和 DNS ttl 中的内部连接管理

c# - 对于非常长的字符串列表,什么是合适的搜索/检索方法?

c++ - 删除 2D 指针矩阵时崩溃 [检测到堆损坏]

python - C++ python API : second call of PyImport_Import results in SIGSEGV

c++ - 为什么成员类型需要前向声明,而成员函数不需要?

c++ - 为什么 VC++ 2013 RC 不支持 C99 指定的初始值设定项?

C WikiBooks - C 是一种小型 "what you see is all you get"语言吗?

mysql - 具有停止条件的嵌套集树的递归 SQL 查询

data-structures - 如何在 Elixir 中过滤日期列表到月份列表?