我在将字符串保存为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()'在这里被注释掉了。一旦小部件被销毁,指针将变为无效 –
也是您的问题的主要描述(“当我添加另一个元素时,所有元素都消失了”)不是通过输出来判断:) –