GSList问题(GLib)

时间:2011-05-10 10:17:27

标签: c programming-languages glib

HI,

我正在尝试使用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);

当我打印elemnts的数量时,我看到列表不是空的。但是当我打印最后一个元素时,它没有显示任何内容......

我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:3)

该列表仅保留指针值。如果指针指向的内存稍后被覆盖,则会出现问题。

在存储字符串之前,解决方案可以是duplicate

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

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

g_list_free_full(res, g_free);

在释放列表本身之前,它会调用每个数据指针上的标准g_free()函数。