2010-06-12 3 views
0

мне нужно в глобальном списке в моем GTK + приложение, я использую для этого GList:Глобальный список в C/GTK +

Например:

У меня есть структура:

typedef struct _data 
{ 
    Glist list; 
}Data; 

Я хочу использовать одну копию списка во всей программе:

у меня есть функция Bulid мой список:

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); 
} 

После вызова этой функции, чтобы отобразить все элементы из списка:

Первый Второй Третий

, но когда я пытаюсь сделать это в другой функции - например:

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

Я вижу ошибку в gdb:

** Программный сигнал SIGSEGV, ошибка сегментации. [Переключение на тему 0xb7335700 (LWP 5364)] 0xb765a7d7 в strchrnul() из /lib/i686/cmov/libc.so.6 **

Как я могу создать глобальный список в моем приложении?

спасибо.

ответ

1
typedef struct _data 
{ 
    Glist list; 
} Data; 

Это делает Data тип (например, вы можете определить переменную типа Data, делая `data_var данных;), но в своем коде вы используете его в качестве переменной:

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

Если вы хотите использовать это переменная, вам нужно изменить вещи:

struct _data 
{ 
    Glist list; 
} Data; 

Когда вы сделаете это, Data не является указателем, так что вы сможете получить доступ это данные, как это (п Otice, что вы используете . вместо ->):

gboolean build_list() { Data.List = g_list_append (Data.List, "Первый");

Смежные вопросы