Я пытаюсь научиться использовать контейнер GHashTable из glib и наблюдаю странное поведение при поиске. Проблема сводится к следующему:
#include <glib.h>
#include <stdio.h>
GHashTable *h;
char val[] = {'H', 'E', 'L', 'L', 'O',0};
void f1()
{
int k;
scanf("%d", &k);
g_hash_table_insert(h, &k, val);
}
void f2()
{
int m;
f1();
scanf("%d", &m);
gpointer *p = g_hash_table_lookup(h, &m);
printf("%s\n", (const char*)p);
}
int main()
{
h = g_hash_table_new(g_int_hash, g_int_equal);
f2();
return 0;
}
В функции f2
результатом g_hash_table_lookup
является 0x00. Однако, если я вызову f1
из main перед вызовом f2
и пропущу вызов f1
из f2
, код будет работать, как и ожидалось, и выведет «HELLO».
Я думаю, что мне не хватает чего-то очень простого здесь. Как правильно выполнять вставки и поиск хэш-таблицы в glib?
scanf
жестко заданным целым числом? - person Anthony   schedule 01.06.2013