Использование GHashTable от GLib? - PullRequest
2 голосов
/ 19 августа 2011

Я пытаюсь использовать GHashTable в моем коде. Я буду использовать int в качестве моего ключа и структуру в качестве моего значения. Мои вопросы:

  • Должен ли я выделить память для int, который я использую в качестве ключа, или я могу просто использовать локальную переменную в функциях для вставки и поиска?
  • Что делает g_int_to_pointer? 1012 *
  • Если я пишу GDestroyFunction, придется ли мне освобождать память?

Ответы [ 2 ]

3 голосов
/ 19 августа 2011

GINT_TO_POINTER (обратите внимание на заглавные буквы) упаковывает 32-битное int в пространство указателя, которое может быть 32 или 64-битным. Вы можете использовать этот макрос для передачи int s в качестве параметра user_data сигнала, избегая, например, выделения памяти для них. Затем в обработчике сигнала, используйте GPOINTER_TO_INT, чтобы вернуть ваш int. Не пытайтесь разыменовать указатель!

2 голосов
/ 19 августа 2011

Должен ли я выделять память для int, который я использую в качестве ключа, или я могу просто использовать локальную переменную в функциях для вставки и поиска?

Нет, вы не можетепередать целое число по значению, вам не нужно выделять его в куче с помощью malloc() и т. п.

Что делает g_int_to_pointer?

Извините, яне знаю этого.

Если я пишу функцию GDestroy, мне нужно будет освободить память?

Вы имели в виду GDestroyNotify ?Как указано в документации:

Указывает тип функции, которая вызывается при уничтожении элемента данных.Он передает указатель на элемент данных и должен освободить всю память и ресурсы, выделенные для него.

Да, вам нужно освободить выделенную память.

...