2010-06-12 10 views
0

J'ai besoin dans la liste globale dans mon application GTK +, j'utiliser pour elle GList:Liste mondiale en C/GTK +

Par exemple:

Je structure:

typedef struct _data 
{ 
    Glist list; 
}Data; 

Je veux utiliser une copie de la liste dans l'ensemble du programme:

J'ai une fonction bulid ma liste:

gboolean build_list() 
{ 
    Data->list = g_list_append(Data->list, "First "); 
    Data->list = g_list_append(Data->list, "Second "); 
    Data->list = g_list_append(Data->list, "Third "); 

    g_list_foreach(Data->list, (GFunc)printf, NULL); 
} 

Après avoir appelé cette fonction pour afficher tous les éléments de la liste:

Premier Deuxième Troisième

, mais lorsque je tente de le faire dans une autre fonction - par exemple:

void foreach() 
{ 
    g_list_foreach(Data->list, (GFunc)printf, NULL); 
} 

Je vois une erreur dans gdb:

** Programme reçu le signal SIGSEGV, Défaut de segmentation. [Mise à Enfiler 0xb7335700 (LWP 5364)] 0xb765a7d7 dans strchrnul() de /lib/i686/cmov/libc.so.6 **

Comment puis-je créer une liste globale dans mon application?

Merci.

Répondre

1
typedef struct _data 
{ 
    Glist list; 
} Data; 

Cela fait Data un type (vous pouvez définir une variable de type Data en faisant `données data_var;), mais dans votre code que vous utilisez comme une variable:

gboolean build_list() 
{ 
    Data->list = g_list_append(Data->list, "First "); 

Si vous voulez l'utiliser est une variable, vous devez changer les choses à:

struct _data 
{ 
    Glist list; 
} Data; 

Quand vous faites cela, Data est pas un pointeur, donc vous accéder aux données de comme ceci (n RTANTES que vous utilisez . au lieu de ->):

gboolean build_list() { Data.List = g_list_append (Data.List, "First");

Questions connexes