-1

我正在使用g_object_set_dataevent_box 设置用户名,因此在回调中我可以使用 event_box 指针获取它。

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

但问题是我设置的 user_name 不是指针分配的字符串。
它是一个被破坏的本地字符串(未在臀部分配)。

那么是否有必要分配然后使用指针,我只想将一个名称与这个event_box相关联。

4

2 回答 2

6

使用以下代码:

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

这样字符串将在堆上复制,并且副本将在event_box销毁时自动释放。

于 2010-05-04T13:14:16.677 回答
2

是的,因为存储在 GObject 中的数据只是一个普通的指针,它不能为你做内存管理。

只需调用g_strdup()字符串并存储结果。

于 2010-05-04T11:55:50.257 回答