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