【发布时间】:2017-07-17 00:59:52
【问题描述】:
我正在使用由 C++ 中的链表表示的数组和存储桶构建一个哈希表。当我尝试清除哈希表时,我遇到了一些非常奇怪的事情,如果有人能解释为什么会发生这种情况,我将不胜感激。
这段代码运行良好:
for(int i = 0; i < bins; i++)
{
while(map[i]->next != nullptr)
{
LN* toDelete = map[i];
map[i] = map[i]->next;
delete toDelete;
}
}
但是由于某种原因,如果我这样做,它不会再删除任何内容:
for(int i = 0; i < bins; i++)
{
LN* node = map[i]
while(node->next != nullptr)
{
LN* toDelete = node;
node = node->next;
delete toDelete;
}
}
每个 bucker 都由一个预告片链表表示,这就是我检查 node->next 而不是 node 的原因。根据我对指针的理解,node 应该与 map[i] 引用相同的东西,所以当我在 node 上调用 delete 时,它应该删除 map[i] 和 node 引用的对象。
提前谢谢你
【问题讨论】:
-
请edit您的问题提供minimal reproducible example。
-
我假设您正在做这个哈希表作为练习?否则你应该使用
std::unordered_map。 -
您的代码(两个示例)不会删除 所有 个节点,也不会删除最后一个节点。
-
这是一个预告片链表,所以如果它把预告片留在原地就可以了
-
如果
map [0]是nullptr会发生什么?