【问题标题】:Store a float as key in GhashTable将浮点数作为键存储在 GhashTable 中
【发布时间】:2014-08-28 01:10:25
【问题描述】:

您好,考虑到没有 GFLOAT_TO_POINTER 宏方法,我想知道是否可以将浮点数作为键存储到 GhashTable 中。

我正在学习 IBM http://www.ibm.com/developerworks/linux/tutorials/l-glib/section5.html 在网上找到的教程,但我似乎找不到使用浮点数作为键的方法。

任何帮助将非常感谢!

typedef struct Settings settings;
typedef struct Preset preset;

struct Gnomeradio_Settings
{
    GList *presets;
};

struct Preset
{
    gchar *name;
    gfloat freq;
};

我想将 settings.presets 列表中的所有频率作为 GHashTable 中的键

GHashTable *hash;
GList      *node;

hash = g_hash_table_new (g_double_hash, g_double_equal);
for (node = settings.presets; node; node = node->next) {
    preset *ps;
    gfloat *f;

    ps = (preset *) node->data;
    f = g_malloc0 (sizeof (gfloat));
    *f = ps->freq;
    g_hash_table_insert (hash, f, NULL);
}

void printf_key (gpointer key, gpointer value, gpointer user_data)
{
    printf("\t%s\n", (char *) key);
}

void printf_hash_table (GHashTable* hash_table)
{
    g_hash_table_foreach (hash_table, printf_key, NULL);
}

printf_hash_table (hash);

但没有成功!

这个印刷品:

���B
ff�B
ff�B
���B
ff�B
f��B
f��B
���B
33�B
ff�B
�L�B
���B
�̲B

【问题讨论】:

标签: c glib


【解决方案1】:

您的代码在我看来是正确的,除了打印出键值的例程。我认为您的意思是,它将每个 gfloat 值输出为字符串:

void printf_key (gpointer key, gpointer value, gpointer user_data)
{
    printf("\t%f\n", *(gfloat *) key);
}

为避免内存泄漏,您可能还应该像这样创建哈希表,以便在表被销毁(或插入重复键)时自动释放您为每个键分配的内存:

hash = g_hash_table_new_full (g_double_hash, g_double_equal, g_free, NULL);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多