使用`g_object_set_data`传递用户名

时间:2010-05-04 11:20:45

标签: gtk glib gobject

我正在使用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关联。

2 个答案:

答案 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(),然后存储结果。