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

标签 c struct gtk

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

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/

相关文章:

c - 我的 ls -R 不起作用

linux - 使用 Glade Interface Designer 和 Vala(编程语言)

gtk - 在 Rust 中处理 GTK+ 事件的替代方法

cursor - 更改小部件鼠标悬停上的光标(PyGObject)

c++ - 在结构中访问 std::list 会引发段错误

c - C 中数组中数字的频率计数此代码有效且高效

c++ - 在常量表达式中除以零

我可以在 fork()==0 中使用 wait(NULL) 吗?

c++ - 函数调用运算符重载的参数太多

c - 来自/usr/lib/system/libsystem_platform.dylib 的段错误(作者标记为删除)