C GSList问题(GLib)
嗨 我试图使用glib.h中的GSList,但在用char*元素填充列表时遇到了问题 代码如下:C GSList问题(GLib),c,programming-languages,glib,C,Programming Languages,Glib,嗨 我试图使用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)); p
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);
当我打印元素数时,我看到列表不是空的。但当我打印最后一个元素时,它没有显示任何内容
我做错了什么
谢谢 列表将只保留指针值。如果指针指向的内存稍后被覆盖,则会出现问题 解决方案可以是在存储字符串之前对其进行以下操作:
res = g_list_append(res, g_strdup(nombre));
这将存储指向新字符串的指针,这些指针存储在新分配的内存中,每个字符串都不同。当然,您需要在以后通过对每个存储的指针调用g_free()
来清除此问题,否则您的程序将泄漏内存:
g_list_free_full(res, g_free);
这将在释放列表本身之前,对每个数据指针调用标准的
函数。列表将只保留指针值。如果指针指向的内存稍后被覆盖,则会出现问题
解决方案可以是在存储字符串之前对其进行以下操作:
res = g_list_append(res, g_strdup(nombre));
这将存储指向新字符串的指针,这些指针存储在新分配的内存中,每个字符串都不同。当然,您需要在以后通过对每个存储的指针调用g_free()
来清除此问题,否则您的程序将泄漏内存:
g_list_free_full(res, g_free);
这将在释放列表本身之前,对每个数据指针调用标准的
函数。可能您的最后一列文本为空?不,不,上面有一个字符串。之前,我用printfMaybe测试了它。你的最后一列文本是空的吗?不,不,上面有一个字符串。之前,我用一个printf@mccrank字体很高兴它有帮助。也可以随意接受答案。@mccrank:很高兴这有帮助。也可以随意接受答案。