2010-05-04 16 views
0

我正在使用g_object_set_data來設置用戶名和event_box,所以在回叫我可以在event_box指針中獲取它。使用`g_object_set_data`傳遞用戶名

g_object_set_data(G_OBJECT(event_box), "user_name", (gpointer)(user_name)); 

但問題是,我設置user_name這不是一個指針分配的字符串。
這是一個本地字符串(未分配在臀部),它被破壞。

所以有必要分配然後使用指針,我只想把一個名字與這個event_box關聯起來。

回答

6

使用下面的代碼:

g_object_set_data_full (G_OBJECT (event_box), 
         "user_name", 
         g_strdup (user_name), 
         (GDestroyNotify) g_free); 

這樣的字符串將複製堆上,當event_box被破壞的副本將得到自動釋放。

+0

謝謝,它像一個魅力工作!並沒有任何內存泄漏:) – User7723337 2010-05-04 13:33:31

2

是的,由於存儲在GObject中的數據只是一個普通指針,因此無法爲您執行內存管理。

只要在字符串上調用g_strdup()並存儲結果即可。

+2

但是解放它呢? 我在循環中創建這個EventBox。 在哪裏刪除這個分配的字符串? – User7723337 2010-05-04 12:31:37