哈希 table 的 unload() 似乎不起作用

unload() of a hash table doens't seem to work

下面的函数应该卸载我的哈希 table node* table[26];。如果散列 table 已成功卸载,则 returns 为真,否则为假。但在这里,它一直返回 false。 我不知道我做错了什么。

bool unload(void)
{
    // TODO
    for (int i = 0; i < 26; i++)
    {
        free_table(table[i]);
        if (table[i] != NULL)
        {
            return false;
        }
    }
    return true;
}


void free_table(node* hash)
{
    if (hash == NULL)
    {
        return;
    }
    free_table(hash -> next);
    free(hash);
    hash = NULL;
}

在此代码中

    free_table(table[i]);
    if (table[i] != NULL)

table[i] 未由 free_table

更新

如果你想更新它,你必须这样做

   void free_table(node** hash);
   ...
   free_table(&table[i]);
   if (table[i] != NULL)
   ....
   void free_table(node** hash)
   {
      if (*hash == NULL)
      {
         return;
      }
      free_table((*hash) -> next);
      free(*hash);
      *hash = NULL;
}

ie - c 风格 'pass by reference' ,又名 'double pointer'