0
我不太确定为什么如果我尝试释放数据,我得到段错误。任何帮助将不胜感激。Glib段错误g_free哈希表
struct mystu {
char *q;
};
static GHashTable *hashtable;
static void add_inv(char *q)
{
gpointer old_key, old_value;
if(!g_hash_table_lookup_extended(hashtable, q, &old_key, &old_value)){
g_hash_table_insert(hashtable, g_strdup(q), GINT_TO_POINTER(10));
}else{
(old_value)++;
g_hash_table_insert(hashtable, g_strdup(q), old_value);
g_hash_table_remove (hashtable, q); // segfault
g_free(old_key); // segfault
g_free(old_value); // segfault
}
}
...
int main(int argc, char *argv[]){
hashtable = g_hash_table_new(g_str_hash, g_str_equal);
...
struct mystu stu;
add_inv(stu.q);
g_hash_table_destroy(hashtable);
}
谢谢。我按你的说法做了,似乎在工作。现在我可以从哈希表中删除该条目g_hash_table_remove(hashtable,q);和g_free(old_key);但由于某种原因g_free(old_value);给段错误。 – Mike 2010-03-11 19:54:26
@Mike:old_value malloc'd或new'd? – t0mm13b 2010-03-11 21:22:28