我在將字符串保存爲glist時遇到了很多麻煩。當我添加一個新字符串時,所有以前的元素都消失了,當我用「FOR」打印整個列表時,它剛好出現在我添加的最後一個列表中,在列表中的其他空格中只是垃圾,如下所示:GList問題(GTK +,C)
OUTPUT按壓按鈕15
guardo el elemento:"15"
numero: "15"
OUTPUT按壓按鈕11
guardo el elemento:"11"
numero: ""
numero: "11"
OUTPUT按壓按鈕10
guardo el elemento:"10"
numero: ""
numero: ""
numero: "10"
輸出按下按鈕6
guardo el elemento:"6"
numero: ""
numero: ""
numero: "0�"
numero: "6"
我的名單將在下一結構
typedef struct widgets {
...
GList *LISTA;
}WIDGETS;
和宣佈,以主
gint main(gint argc,gchar *argv[])
{
...
WIDGETS *boton;
// 1.- Inicializar el ambiente
gtk_init(&argc, &argv);
boton = malloc(sizeof(WIDGETS));
boton->tipojuego=1;
boton->numMov=0;
boton->bandera=2;
g_timeout_add(1000,tiempo,boton);
boton->LISTA=NULL;
...
}
初始化的保存和打印列表元素是功能(「elementos」與boton相同):
void movimientos(GtkWidget *widget,gpointer info)
{
WIDGETS *elementos=(WIDGETS*)info;
gchar *str;
gpointer infor;
gint i;
//str=malloc(3*sizeof(char));
str=gtk_widget_get_name(widget);
g_print("guardo el elemento:\"%s\" \n",str);
elementos->LISTA=g_list_append(elementos->LISTA, str);
// g_print("Ya se guardo %s",(gchar *)g_list_last(elementos->LISTA)->data);
for(i=0;i<g_list_length(elementos->LISTA);i++)
{
infor=g_list_nth_data(elementos->LISTA,i);
str=(gchar *)infor;
g_print("\nnumero: \"%s\"",str);
}
}
我不知道爲什麼'str = malloc()'在這裏被註釋掉了。一旦小部件被銷燬,指針將變爲無效 –
也是您的問題的主要描述(「當我添加另一個元素時,所有元素都消失了」)不是通過輸出來判斷:) –