Глобальный список в C / GTK + - PullRequest
0 голосов
/ 12 июня 2010

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

Например:

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

typedef struct _data
{
  Glist list;
}Data;

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

У меня есть функция в моем списке:

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 Ответ

1 голос
/ 12 июня 2010
typedef struct _data
{
  Glist list;
} Data;

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

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

Если вы хотите использовать его как переменную, вам нужно изменить его на:

struct _data
{
  Glist list;
} Data;

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...