Je ne sais pas vraiment pourquoi, si j'essaie de libérer les données, je me suis trompé. Toute aide sera l'apprécier.Glib segfault g_free table de hachage
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);
}
Merci. J'ai fait comme vous l'avez indiqué et semble fonctionner. Maintenant, je peux supprimer cette entrée de la table de hachage g_hash_table_remove (hashtable, q); et g_free (old_key); mais pour une raison quelconque, g_free (old_value); donne segfault. – Mike
@Mike: était old_value malloc'd ou new'd? – t0mm13b