LINUX.ORG.RU

g_hash_table... лажа какая-то, или лыжи не едут.


0

0

Народ, я тут въехать никак не могу, плиз, можешь кто ткнет меня носом в ошибку?

есть функция, которой передается строка, есть хэшь таблица. Сначала смотрю, есть ли уже такой хеш в таблице или нет, еже ли есть, то отдаю ассоциированное значение (в данном случае GtkListStore *), еже ли нет, то создаю его и вставляю с новым ключем в таблицу хэшей.

Вот собсно код:

static GHashTable * hash_details = NULL;

GtkListStore *
engine_nav_details_get (gchar *key)
{
GtkListStore *detail = NULL;

if (hash_details == NULL)
hash_details = g_hash_table_new (g_str_hash, g_str_equal);

detail = (GtkListStore *) g_hash_table_lookup (hash_details,
key);
if (detail != NULL)
{
printf ("hash found (%s)%d\n", key, g_str_hash (key));
return detail;
} else
{
printf ("insert hash (%s)%d\n", key, g_str_hash (key));
};
detail = gtk_list_store_new(3,
G_TYPE_STRING, // stock id
G_TYPE_STRING, // name/attribute
G_TYPE_STRING); // comment/value
g_object_ref (G_OBJECT (detail));
g_hash_table_insert (hash_details, key, detail);

return detail;
};


вот выхлоп работы этой функции.

insert hash (0x81afb88ANONYMOUS9ANONYMOUS)-1760927547
insert hash (0x81afb88DBSNMP9DBSNMP)-1941766787
hash found (0x81afb88DIP9DIP)-238168319
hash found (0x81afb88EXFSYS9EXFSYS)-2019942467
insert hash (0x81afb88OUTLN9OUTLN)-286256565
insert hash (0x81afb88SYS9SYS)650336901
insert hash (0x81afb88SYSTEM9SYSTEM)833930781
insert hash (0x81afb88WMSYS9WMSYS)-1360972071
hash found (0x81afb88XDB9XDB)175980119
hash found (0x81afb88ZEUS9ZEUS)140161757

откуда в 3-ей строке hash found?

Deleted

забыл сказать, по логике приложения в выхлопе должны быть только insert hash, то бишь на этом этапе таблица только заполняется

Deleted
()
Ответ на: комментарий от Deleted

Все, вопрос снят. Туплю. :)

тем кто не понял в чем суть: key должен для каждого value свой, тобишь надо переаллоцировать, в данном случае необходимо сделать g_strdup (key) в вставке в таблицу хешей. Но в этом случае будут утечки. Надо создавать таблицу методом g_hash_table_new_full, дабы потом была возможность освободить память, что мы аллоцировали для ключей.

Deleted
()
Ответ на: комментарий от Deleted

> тем кто не понял в чем суть

За объяснение сути зачет: иногда чувствуешь себя полным дураком, когда пытаешься вникнуть в проблему, а потом тебе говорят, что вопрос снят и всем спасибо ...

anonymous
()
Ответ на: комментарий от Sikon

Не нравится - не ешь! :) С тем же успехом могу перефразировать тебя: s/Qt/GTK/

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.