2011-08-19 42 views
2

我想在我的代碼中使用GHashTable。我將使用int作爲我的鑰匙和結構作爲我的價值。我的問題:GLib中GHashTable的用法?

  • 我將不得不分配爲我使用的一個關鍵的int內存,或者我可以只使用在函數的局部變量插入和查找?
  • g_int_to_pointer是做什麼用的?
  • 如果我正在編寫GDestroyFunction,我需要釋放任何內存嗎?

回答

2

我將不得不分配爲我使用的一個關鍵整型內存,或者我可以只使用在函數的局部變量插入和查找?

不,你可以按值傳遞整數,你不需要在malloc()之類的堆上分配它。

g_int_to_pointer做什麼?

對不起,我不知道那一個。

如果我正在寫一個GDestroyFunction,我將不得不釋放任何內存嗎?

您的意思是GDestroyNotify?如文檔所述:

指定在銷燬數據元素時調用的函數的類型。它傳遞指向數據元素的指針並釋放爲其分配的內存和資源。

是的,你必須釋放分配的內存。

3

GINT_TO_POINTER(介意大寫字母)將32位int打包到指針的空間中,該指針可能是32位或64位。例如,您可以使用此宏將int s作爲信號的參數user_data,同時避免爲它們分配內存。然後在信號處理程序中,使用GPOINTER_TO_INT將int返回。不要嘗試解除指針的引用!

+0

謝謝你的回答。我正在考慮在使用'GHashTable'時使用int作爲'key'。我可以使用'G_INT_TO_POINTER'將其轉換爲一個指針,以便它可以在[link]中使用(http://developer.gnome.org/glib/stable/glib-Hash-Tables.html#g-hash-table -插)。在從表中檢索時,我可以使用相同的'G_INT_TO_POINTER'宏將int轉換爲所需的指針嗎?他們都將被保證是相同的參考? – jogabonito

+0

@jogabonito:是的。 – ptomato

+0

不,您需要使用'GPOINTER_TO_INT'來獲取原始int,如答案中所述。順便說一句,我試圖解決這個錯誤(在G之後你不需要'_'),但是我抱怨說我的編輯太短了。 –