所以我试图完全释放我的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);
}
}
我不明白为什么它不能释放哈希......如果有人可以提供帮助,我会很高兴:)
答案 0 :(得分:0)
你的免费功能应该只是:
void destroyUser(gpointer x)
{
free(x);
}
或者,只需将free
作为最后一个参数传递,不需要将它包装在您自己的函数中。也:
NULL
- 在将指针传递给free()
之前检查,因为free(NULL)
定义明确。malloc()
单独分配的,而是整个结构分配的一部分。g_malloc()
和g_free()
,因为它是一个滑稽的程序?