在GHash中释放结构时出错

时间:2018-04-23 17:49:19

标签: c hash free glib

所以我试图完全释放我的HashTable,但我得到了这个错误,我不知道如何解决它:

program(77439,0x7fffa18e9340) malloc: *** error for object 0x7fa0096b7208: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6

哈希是这样创造的:

GHashTable* users = g_hash_table_new_full(g_direct_hash,g_direct_equal,NULL,destroyUser);

USER结构以这种方式定义:

typedef struct user {
    gpointer id;
    char username[256]; 
    int post_count; 
    char short_bio[16384]; 
    int reputation;
}*USER;

这是我的自由职能:

void destroyUser(gpointer x) {
struct user *n = (struct user *) x; 
if (n) {
    free(n -> username);
    free(n -> short_bio);
    free(n);
}
}

我不明白为什么它不能释放哈希......如果有人可以提供帮助,我会很高兴:)

1 个答案:

答案 0 :(得分:0)

你的免费功能应该只是:

void destroyUser(gpointer x)
{
  free(x);
}

或者,只需将free作为最后一个参数传递,不需要将它包装在您自己的函数中。也:

  • 没有必要NULL - 在将指针传递给free()之前检查,因为free(NULL)定义明确。
  • 您不能释放嵌入式阵列,它们不是使用malloc()单独分配的,而是整个结构分配的一部分。
  • 也许您应该使用g_malloc()g_free(),因为它是一个滑稽的程序?