我正在使用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相关联。
使用以下代码:
g_object_set_data_full (G_OBJECT (event_box),
"user_name",
g_strdup (user_name),
(GDestroyNotify) g_free);
这样字符串将在堆上复制,并且副本将在event_box
销毁时自动释放。
是的,因为存储在 GObject 中的数据只是一个普通的指针,它不能为你做内存管理。
只需调用g_strdup()
字符串并存储结果。