使用“g_object_set_data”传递用户名

发布于 2024-08-31 09:44:57 字数 300 浏览 3 评论 0原文

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

I am using g_object_set_data to set user name with event_box so in call back i can get it with in event_box pointer.

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

but problem is that i am setting user_name which is not an pointer allocated string.
It is an local string (not allocated on hip) which gets destroyed.

So is it necessary to allocated and then use the pointer, i just want to associate one name with this event_box.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

已下线请稍等 2024-09-07 09:44:57

使用以下代码:

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

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

Use the following code:

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

This way the string will duplicated on the heap and the copy will get freed automatically when event_box is destroyed.

那请放手 2024-09-07 09:44:57

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

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

Yes, since the data stored in the GObject is just a plain pointer, it can't do the memory management for you.

Just call g_strdup() on the string, and store the result.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文