Я думаю, ваш код вставки не работает. Вы выделяете память только один раз, но затем выполняете много операций вставки, увеличивая значение, хранящееся в одном выделенном месте между каждым.
Хеш-таблица хранит ваш указатель, поэтому в конечном итоге все ключи будут ассоциироваться с одним и тем же указателем.
Кроме того, вам, вероятно, следует использовать g_malloc()
с glib для согласованности.
И я всегда рекомендую использовать sizeof
для объектов, а не для их типов; таким образом, вы не повторяете себя так опасно. Итак, вместо
guint32 *a;
a = g_malloc(sizeof (guint32));
использование
a = g_malloc(sizeof *a);
Таким образом, вы «блокируете» зависимость, так что вы всегда выделяете достаточно места для хранения того, на что указывает a
, даже если вы позже измените тип.
Кроме того, вы должны внимательно смотреть на каждый актерский состав, который вы делаете. Приведение любого неконстантного указателя к gpointer
является признаком нерешительного программиста. С glib gpointer
является просто синонимом void *
, поэтому приведение никогда не требуется. Это просто добавляет в ваш код неприятности, затрудняя чтение.