Вы не можете вставить автоматическую переменную; Вы должны выделить память для данных для динамического хранения, то есть, используя g_malloc()
или эквивалентный.
Затем вам нужно найти способ вычислить значение хеш-функции из ваших данных, чтобы помочь таблице быть эффективной. Использование g_direct_hash()
здесь не очень хорошо; в качестве хеш-значения он будет использовать указатель на ваши данные.
Кажется, что вы хотите использовать элемент a
вашей структуры в качестве ключа; какой тип это поле? Если это целое число, вы можете использовать <a href="http://g_int_hash">g_int_hash()</a>
.
Я думаю, это больше похоже на то, как должен выглядеть ваш реальный код:
GHashtable *table;
struct mystruct *my;
table = g_hash_table_new_full(g_int_hash, g_int_equal, NULL, g_free);
my = g_malloc(sizeof *my);
my->a = 1;
my->b = "hello";
my->c = 5;
my->d = "test";
g_hash_table_insert(table, GINT_TO_POINTER(my->a), my);
Обратите внимание, что это предполагает, что члены b
и d
являются просто символьными указателями, поскольку для строк динамически не выделяется память.