我正在使用g_object_set_data
使用event_box设置用户名,因此在回调中我可以在event_box指针中使用它。
g_object_set_data(G_OBJECT(event_box), "user_name", (gpointer)(user_name) );
但问题是我设置的user_name不是指针分配的字符串 它是一个本地字符串(未在臀部分配)被破坏。
所以有必要分配然后使用指针,我只想将一个名称与此event_box关联。
答案 0 :(得分:6)
使用以下代码:
g_object_set_data_full (G_OBJECT (event_box),
"user_name",
g_strdup (user_name),
(GDestroyNotify) g_free);
这样,字符串将在堆上重复,当event_box
被销毁时,副本将自动释放。
答案 1 :(得分:2)
是的,因为存储在GObject中的数据只是一个普通的指针,它不能为你做内存管理。
只需在字符串上调用g_strdup()
,然后存储结果。