gpt4 book ai didi

c - GTK+,结构中的 gchar 似乎被释放

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:42 25 4
gpt4 key购买 nike

在我的应用程序中我有结构:

struct
{
gchar *xen_srv_addr;
gchar *xen_srv_usr;
gchar *xen_srv_psw;
gchar *xen_srv_prt;
} Xen_Server_Connection;

我想为那个 gchar 赋值。我从文件中读取它,用 strtok 解析并作为 char* 返回。设置解析器查找特定标记并:

if(a==b)
{
Xen_Server_Connection.xen_srv_addr=Parm_Pars(pattern, 2);
.....
}

这个赋值只在这个 if block 中起作用。gchar 就在它之后变成了垃圾。但是如果我:

if(a==b)
{
Xen_Server_Connection.xen_srv_addr="192.168.1.1";
.....
}

一切似乎都很好,我可以在全局范围内访问该 gchar。好像没看懂

最佳答案

你不明白什么是生命周期保证 Parm_Pars()函数给出返回值。它似乎不会永远存在,所以如果你想坚持下去,你需要复制它。

只需将该行包装在对 <a href="http://developer.gnome.org/glib/stable/glib-String-Utility-Functions.html#g-strdup" rel="noreferrer noopener nofollow">g_strdup()</a> 的调用中获得动态分配的副本,你应该没问题。当然,当你想释放你的 Xen_Server_Connection 时,您必须调用 g_free()在所有重复的字符串上,否则您将泄漏内存。

更新:混合普通 chargchar很好,glib 保证 gchar只是 char 的别名.我认为他们甚至(在某处)建议应用程序永远不要使用 gchar .

关于c - GTK+,结构中的 gchar 似乎被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12091172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com