Я пытаюсь узнать, как использовать контейнер GHashTable из glib, и я вижу странное поведение в поиске. Проблема сводится к следующему:Ошибка поиска в таблице Hash Hash
#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
из основного номера до звонка f2
и пропустил вызов f1
от f2
, код работает должным образом и печатает «HELLO».
Я думаю, что мне не хватает чего-то очень элементарного здесь. Как сделать хэш-таблицы вставки и поиск правильно в glib?
Можете ли вы временно заменить вызовы 'scanf' целым целым числом? – Anthony
Я пытался это сделать, но результат тот же. –