glib から GHashTable コンテナーの使用方法を学ぼうとしていますが、ルックアップで奇妙な動作が見られます。問題は次のように要約されます。
#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;
}
functionf2
では、 の結果g_hash_table_lookup
は 0x00 です。ただし、呼び出すf1
前にメインから呼び出し、からの呼び出しをf2
スキップすると、コードは期待どおりに機能し、「HELLO」が出力されます。f1
f2
ここで非常に基本的なものが欠けていると思います。glibでハッシュテーブルの挿入と検索を正しく行うにはどうすればよいですか?