调试“free()时出错:在 tcache 2 中检测到双重释放”-C

问题描述 投票:0回答:1

所以我明白这个错误的含义,有些东西被释放了两次。但是当我单步执行代码时,我实际上看不到逻辑/语法错误。我无法调试,因为此错误阻止我运行调试器。这是我的代码,有什么想法吗?另外,此代码旨在释放我在 C 中创建的哈希图。

bool unload(void)
{
    for (int i = 0; i < N; i++)
    {
        while (table[i] != NULL)
        {
            node *temp = table[i]->next;
            free(table[i]);
            table[i] = temp;
        }
    }
    return true;
}
c hashmap free
1个回答
0
投票

您的代码片段对于释放哈希表似乎是合理的。问题可能出在程序的其他地方,或者出在您如何使用哈希表。

这里有一些帮助您调试的建议:

  1. 检查节点分配:确保当您为新节点分配内存时(大概是插入哈希表时),您正在分配新的内存。如果您要复制指针或数据,请确保它是深复制。

  2. 验证哈希函数和表大小:确保您的哈希函数正常工作,并且哈希表的大小 (N) 与您在初始化期间分配的大小匹配。

  3. 检查插入和删除逻辑:如果您在运行时修改哈希表(插入或删除节点),请仔细检查这些操作是否正确且一致地执行。

  4. 检查其他地方的内存释放:确保您没有在程序的其他地方释放相同的内存。一个常见问题是释放循环内的内存但未正确更新循环变量。

© www.soinside.com 2019 - 2024. All rights reserved.