我正在尝试学习如何使用 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;
}
在函数f2
中,结果g_hash_table_lookup
为 0x00。但是,如果我f1
在调用之前从 main 调用f2
并跳过调用f1
from f2
,则代码将按预期工作并打印“HELLO”。
我想我在这里遗漏了一些非常基本的东西。如何在 glib 中正确进行哈希表插入和查找?