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

时间:2012-08-23 12:05:26

标签: c struct gtk

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

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

我想为那些gchars分配一个值。我从文件中读取它,用strtok解析并返回char *。 设置解析器会查找特定标记,并且:

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

此赋值仅适用于此if块。 gchar就在它之后就变成了垃圾。但如果我:

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

一切似乎都没问题,我可以全局访问该gchar。 似乎我不明白

1 个答案:

答案 0 :(得分:2)

您不了解Parm_Pars()函数对返回值的生命周期保证。它似乎永远不会存在,所以如果你想坚持下去,你需要复制它。

只需在调用g_strdup()时将该行换行即可获得动态分配的副本,您应该没问题。当然,当您想要释放Xen_Server_Connection时,您必须在所有重复的字符串上调用g_free(),否则您将泄漏内存。

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