在C++中清除哈希表
Clearing a hash table in C++
我创建了一个clear()函数,当被调用时,它会清除整个哈希表并将大小重置为0。该函数导致我的程序内存泄漏,但我没有发现可能的泄漏。。这是我的clear()函数:
void HashMap::clear()
{
unsigned int capacity = HashMap::bucketCount();
for (unsigned int i = 0; i < capacity; i++)
{
Node* temp;
Node* StoreThenDel = new Node;
if (HashTable[i] != nullptr)
{
temp = HashTable[i];
HashTable[i] = nullptr;
while(temp->next != nullptr)
{
StoreThenDel = temp;
if(StoreThenDel->next != nullptr)
temp = StoreThenDel->next;
delete StoreThenDel;
}
}
}
sz=0; // reset size
}
您执行StoreThenDel = new Node
。这将为堆上的Node
分配内存。然后执行StoreThenDel = temp
,丢失有关在堆上为Node
分配内存的位置的信息。
while循环和temp变量非常令人困惑,请尝试将代码简化为以下内容,您会发现更简单的代码问题更少。
for (unsigned int i = 0; i < capacity; ++i)
{
while (HashTable[i] != nullptr)
{
Node* temp = HashTable[i];
HashTable[i] = temp->next;
delete temp;
}
}
Node* StoreThenDel = new Node;
这个new
是一个泄漏,没有必要。
while(temp->next != nullptr)
此循环条件停止得太早。它应该运行到temp != nullptr
。按原样,它会泄露每个列表中的最后一个条目。
if(StoreThenDel->next != nullptr)
temp = StoreThenDel->next;
temp
的分配不应该是有条件的。
相关文章:
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 用C++将哈希表写入文件并从文件中恢复
- C++中的并发哈希表
- 在具有开放寻址的哈希表中插入节点 [优化逻辑]
- 与C++哈希表的基础知识混淆
- 调整大小和复制哈希表数组中的元素
- 带链接的基本哈希表
- C++哈希表中,两个相同的实现,但一个给出错误
- 如果索引不是整数,我们如何在 C++ 中插入哈希表
- 查找项目在哈希表中的位置
- 为什么C++ STL 哈希表 (unordered_map) 不接受向量作为键
- C++哈希表 - 如何解决自定义数据类型作为键的unordered_map冲突?
- 使用哈希表设置实现
- 同时写入和读取哈希表
- 在 C++ 中为特定哈希表创建插入函数
- 我可以比朴素哈希表更快地将随机字符串映射到两个类吗?
- 哈希表:船舶记录
- 使用rehash的C++哈希表问题
- 在C++中清除哈希表