【问题标题】:How to destroy an Hashmap C如何销毁 Hashmap C
【发布时间】:2020-12-17 11:42:03
【问题描述】:

我创建了一个 Hashmap,其中有很多键。我的麻烦是:如何销毁我的哈希图? 如果我在我的 hashmap 中写 free ,它会变成 NULL 还是别的什么? 我认为 free 函数就足够了,但是当我尝试调用我的函数时:

int isEmpty(struct hashmap *t){  
    if(t!=NULL) {
        int sizeT = t->size;
        for (int j = 0; j < sizeT; j++) {
            if (t->list[j] != NULL)
                return FALSE;    // FALSE, if it is full
        }
        return TRUE;   // TRUE, if it is empty
    }else{ 
        printf("Empty!");
        return 2;
    }
}

在这个函数之前我运行free 所以在isEmpty 它可能会进入else 语句而不是它进入if 条件是(t!=NULL)。我怎么能绝对摧毁它?

【问题讨论】:

  • 这是你自己写的哈希表还是第三方库?
  • 为什么一个名为isEmpty 的函数需要一个您没有向我们展示的旨在“销毁”哈希映射的结构?结构如何?你希望free 做什么?
  • 您谈论free() 就像您希望它修改变量一样?那样不行。
  • 我使用isEmpty 函数创建了我自己的哈希表@Shawn,我希望在free 之后,它进入else 语句,因为我删除了我的哈希表。我调用free 以释放所有节点并删除hashmap 结构。 @j3141592653589793238
  • 只有在使用空指针调用函数时才会进入 else 块...

标签: c function hashmap free


【解决方案1】:

假设您使用malloc() 或realloc() 分配了hashmap

free()不一定会给t赋值NULL,所以你应该在free()之后自己赋值

【讨论】:

  • 在执行free(t); 之后将NULL 分配给t 很少有意义。绝大多数时候,您只是不再使用t 的值。在很多情况下,无论如何它都会超出范围,所以这样的分配是没有意义的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多