1

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」が出力されます。f1f2

ここで非常に基本的なものが欠けていると思います。glibでハッシュテーブルの挿入と検索を正しく行うにはどうすればよいですか?

4

2 に答える 2