【发布时间】:2020-12-13 23:13:51
【问题描述】:
我不知道如何释放所有使用的内存,尤其是对于 GHashTable。 我有这样的事情:
struct person
{
char *name;
int age;
};
void free_person(gpointer p){
struct *address person = p;
if (NULL == person)
return;
if(NULL != person->name)
g_free(person->name);
g_free(person);
}
And in main:
GHashTable *persons_info list = g_hash_table_new_full(..., ... , NULL, free_person);
struct person * person1 = g_try_malloc0(sizeof(struct person));
person1->age = 20;
char *name = g_strdup("Raul");
person1->name = g->strdup(name);
g_hash_table_insert(list, 2, person1);
//Now for free...
g_hash_table_destroy(list);
list = NULL;
//Or g_hash_table_unref(list); ?
//What about person1 and name? //Should be Fred or just set to Null?
//If I add the following 2 lines sometimes I got sgm fault
free_person(person1):
person1 = NULL;
如果我释放变量 person 1,是否知道某人导致 sgm 故障的原因?
【问题讨论】:
-
这是错字吗?
person1->name = g->strdup(name); -
离题:
if (NULL == person)通常写作if (person == NULL)。 (将对象与期望值进行比较,而不是将期望值与对象进行比较。) -
这是一种风格选择——有些人提倡
NULL == person,这样如果你不小心遗漏了第二个=,代码就无法编译。 -
是的,ryyker,是一个小贴士,我用手机写了这个问题。
-
编译器几十年来一直能够警告
if语句中的意外分配。NULL == person现在纯粹是一种风格选择,而不是更安全的选择。
标签: c dynamic-memory-allocation glib