【发布时间】:2014-02-27 01:55:29
【问题描述】:
我不认为我理解 glib2 的哈希表,尤其是当 key 和 value 都是整数时如何正确使用 GINT_TO_POINTER。我认为这是在创建新哈希表时使用 g_int_hash 和 g_int_equal 的用例。但是下面的sn-p会出现seg faults。
#include <glib.h>
int main(void) {
GHashTable * freq = g_hash_table_new(g_int_hash, g_int_equal);
for (int i = 0; i < 10; i++) {
g_hash_table_insert(freq, GINT_TO_POINTER(i), GINT_TO_POINTER(0));
}
g_hash_table_destroy(freq);
}
我知道有两种方法可以使它正确:一种是创建一个像这样的哈希表而不改变其他任何东西:
GHashTable * freq = g_hash_table_new(g_direct_hash, g_direct_equal);
第二种方法是,保持原样创建,但为键和值显式分配空间:
int * key = malloc(sizeof(int));
int * value = malloc(sizeof(int));
然后通过将其转换为 (gpointer) 来插入键和值。
第二种方法似乎是一种非常乏味的键值对方法,这是进行 int 到 int 映射的正确方法吗?谢谢。
【问题讨论】:
标签: glib