我创建了一个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
}
答案 0 :(得分:3)
你做StoreThenDel = new Node
。这为堆上的Node
分配内存。然后你执行StoreThenDel = temp
,丢失有关为堆上的Node
分配内存的信息。
答案 1 :(得分:0)
Node* StoreThenDel = new Node;
此new
是泄漏,不需要。
while(temp->next != nullptr)
此循环条件过早停止。它应该运行到temp != nullptr
。因为它泄漏了每个列表中的最后一个条目。
if(StoreThenDel->next != nullptr)
temp = StoreThenDel->next;
temp
的分配不应该是有条件的。
答案 2 :(得分:0)
你的while循环和临时变量只是非常混乱,尝试将代码简化为类似下面的内容,你会发现更简单的代码有更少的问题。
for (unsigned int i = 0; i < capacity; ++i)
{
while (HashTable[i] != nullptr)
{
Node* temp = HashTable[i];
HashTable[i] = temp->next;
delete temp;
}
}