RE: GHashTable strange behavior



Forgot to mention that I am using Glib 2.42 on Linux.

----------------------------------------
From: stathisgotsis hotmail com
To: gtk-list gnome org
Subject: GHashTable strange behavior
Date: Wed, 4 Mar 2015 20:44:04 +0200

Hi all,

I am facing some strange behavior with GHashTable. When I use g_hash_table_insert to insert the same key 
twice, it does not return FALSE, but TRUE:

typedef struct {
int a, b;
} key_t;

typedef struct {
int a, b;
} value_t;

guint hash_func(gconstpointer key)
{
return hash((const char *)key, sizeof(key_t));
}

gboolean equal_func(gconstpointer a, gconstpointer b)
{
return (memcmp(a, b, sizeof(key_t)) == 0);
}

void destroy_key(gpointer data)
{
free(data);
}

void destroy_value(gpointer data)
{
free(data);
}

TEST_F(HashTableTests, test_add)
{

GHashTable *hash_table = g_hash_table_new_full(hash_func, equal_func, destroy_key, destroy_value);

key_t *key1 = (key_t *)malloc(sizeof(*key1));
value_t *value1 = (value_t *)malloc(sizeof(*value1));

key_t *key2 = (key_t *)malloc(sizeof(*key2));
value_t *value2 = (value_t *)malloc(sizeof(*value2));

key1->a = 1;
key1->b = 2;
value1->a = 3;
value1->b = 4;

key2->a = 1;
key2->b = 2;
value2->a = 3;
value2->b = 4;

ASSERT_TRUE(g_hash_table_insert(hash_table, key1, value1));

ASSERT_FALSE(g_hash_table_insert(hash_table, key2, value2)); // Assertion fails

g_hash_table_destroy(hash_table);
}

Any ideas?

BR,
Stathis
_______________________________________________
gtk-list mailing list
gtk-list gnome org
https://mail.gnome.org/mailman/listinfo/gtk-list
                                          


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]