在我的应用程序中,我有结构:
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()
在所有重复的字符串上,否则您将泄漏内存。
更新:混合普通char
和gchar
很好,glib 保证 gchar
只是 char
的别名。我认为他们甚至建议(在某个地方)应用程序永远不要使用 gchar
.
关于c - GTK+,结构中的 gchar 似乎被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12091172/