使用“g_object_set_data”传递用户名
我正在使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用以下代码:
这样,字符串将在堆上复制,并且当
event_box
被销毁时,副本将自动释放。Use the following code:
This way the string will duplicated on the heap and the copy will get freed automatically when
event_box
is destroyed.是的,由于存储在 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.