2011-05-10 52 views
0

嗨,問題與GSList(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)); 
printf("last element: %s\n", g_slist_last(res)->data); 

當我打印elemnts的號碼,我看到該列表不是空的。但是,當我打印最後一個元素,它不顯示任何東西...

我做錯了什麼?

謝謝!

+0

也許您的最後一列文本是空的? – ptomato 2011-05-10 11:11:21

+0

不,不,它有一個字符串。之前,我使用printf – 2011-05-10 11:27:30

回答

3

該列表將只保留指針值。如果指針指向的內存稍後被覆蓋,則會出現問題。

的解決方案可能是duplicate字符串存儲之前:

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

這將存儲指向新的字符串,存儲在新分配的內存,每串不同。當然,你需要在每個存儲指針調用g_free()清理它之後,或者你的程序將導致內存泄漏:

g_list_free_full(res, g_free); 

這就要求每個數據指針標準g_free()功能,釋放列表本身之前。

+0

進行了測試。感謝您的解決方案!它現在工作!謝謝! – 2011-05-10 11:46:31

+0

@mccrank:很高興幫助。請隨時接受答案。 – unwind 2011-05-10 12:23:48