Gtk 使用'g_object_set_data'传递用户名

Gtk 使用'g_object_set_data'传递用户名,gtk,glib,gobject,Gtk,Glib,Gobject,我正在使用g_object_set_data设置带有事件框的用户名,以便在回调中使用事件框指针获取用户名 g_object_set_data(G_OBJECT(event_box), "user_name", (gpointer)(user_name) ); 但问题是我设置的用户名不是指针分配的字符串。 它是一个被销毁的本地字符串(未在hip上分配) 因此,是否需要分配并使用指针,我只想将一个名称与此事件框关联。是的,因为存储在GObject中的数据只是一个普通指针,它无法为您进行内存管理 只

我正在使用
g_object_set_data
设置带有事件框的用户名,以便在回调中使用事件框指针获取用户名

g_object_set_data(G_OBJECT(event_box), "user_name", (gpointer)(user_name) );
但问题是我设置的用户名不是指针分配的字符串。
它是一个被销毁的本地字符串(未在hip上分配)


因此,是否需要分配并使用指针,我只想将一个名称与此事件框关联。

是的,因为存储在GObject中的数据只是一个普通指针,它无法为您进行内存管理


只需对字符串调用
,并存储结果。

使用以下代码:

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

这样,字符串将在堆上复制,当
event\u box
被销毁时,副本将自动释放。

但是释放它怎么样?我正在循环中创建此EventBox。在哪里删除这个分配的字符串?谢谢,它工作得很好!并且没有任何内存泄漏:)