我正在使用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;
}
}
每个桶都由一个挂接链表表示,这就是为什么我检查 node->next 而不是 node。根据我对指针的基本理解,node 应该引用与 map[i] 相同的内容,因此当我在 node 上调用 delete 时,应该删除 map[i] 和 node 引用的对象。
提前感谢您的帮助。
std::unordered_map
。 - Some programmer dudemap [0]
是nullptr
,会发生什么? - Ed Heal