【发布时间】:2015-01-28 04:38:18
【问题描述】:
我有一个用 C++ 编写的 Trie 程序。删除 Trie 存在问题。即使代码正在执行删除操作,内存也不会被释放。有人可以指出我做错了什么吗?程序不处理从 Trie 中删除单个字符串。下面是删除sn-p的代码。
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
【问题讨论】:
-
究竟是什么让你相信内存没有被释放?释放的内存不会从机器上物理删除,不会从地址空间中删除,甚至不会立即被覆盖。
-
@ricl,这是真的“释放的内存不会从机器上物理删除”。我尝试使用 gdb,当 'i' 值更改时,我尝试访问 current->children[i] - 'i' - 以前的值。我的钥匙完好无损,而且我一直看到这一点。
-
是的,你期待什么?
标签: c++ c data-structures