【问题标题】:Problem with GSList (GLib)GSList (GLib) 的问题
【发布时间】:2011-05-10 10:17:27
【问题描述】:

嗨,

我正在尝试使用 glib.h 中的 GSList,但在使用 char * 元素填充列表时遇到问题。

代码如下:

GSList * res = NULL;
char * nombre;

while (...) {
 nombre = sqlite3_column_text(resultado, 1);
     res = g_slist_append (res, nombre);
}   

printf("number of elements: %i\n", g_slist_length(res));
printf("last element: %s\n", g_slist_last(res)->data);

当我打印元素的数量时,我看到列表不为空。但是当我打印最后一个元素时,它什么也没显示......

我做错了什么?

谢谢!

【问题讨论】:

  • 也许你的最后一列文字是空的?
  • 不不,上面有一个字符串。之前,我用 printf 测试过

标签: c programming-languages glib


【解决方案1】:

列表将只保留指针值。如果指针指向的内存稍后被覆盖,您将遇到问题。

解决方案可以是duplicate 存储之前的字符串:

res = g_list_append(res, g_strdup(nombre));

这将存储指向新字符串的指针,存储在新分配的内存中,每个字符串都不同。当然,之后你需要通过在每个存储的指针上调用g_free() 来清理它,否则你的程序会泄漏内存:

g_list_free_full(res, g_free);

这会在释放列表本身之前对每个数据指针调用标准的@987654322@ 函数。

【讨论】:

  • @mccrank:很高兴它有帮助。也请随意接受答案。
猜你喜欢
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-24
  • 2011-05-15
相关资源
最近更新 更多