[C] Динамическое распределение памяти структуры, связанной с GTK - PullRequest
0 голосов
/ 09 января 2011

У меня следующая структура:

    typedef struct
{
 GtkWidget* PoziomaLinijka;
 GtkWidget* PionowaLinijka;
 GtkWidget* Label1;
 GtkWidget* Label2;
 gint x,y;
} StrukturaDrawing;

И мне нужно выделить ее в куче, потому что позже у меня есть функции, которые используют эту структуру, и я не хочу использовать глобальные переменные.Поэтому я выделяю его так:

    StrukturaDrawing* Wsk;
  Wsk = (StrukturaDrawing*)malloc(sizeof(StrukturaDrawing));
  if (!Wsk)
  {
 printf("Error\n");
  }

И он не возвращает ошибку, а также прекрасно работает с другими функциями, он работает так, как я хотел, чтобы он работал, и, наконец, я хотел освободить эту память, и вотпроблема, потому что в режиме отладки суки компилятора:

Исключение первого шанса в 0x102d12b4 в GTK.exe: 0xC0000005: расположение чтения нарушения доступа 0xfffffffc.Необработанное исключение в 0x102d12b4 в GTK.exe: 0xC0000005: Место чтения нарушения доступа 0xfffffffc.

Я подключаю функцию обратного вызова к своей функции, например:

g_signal_connect (G_OBJECT (Okno), "destroy ", G_CALLBACK (Wyjscie), Wsk);

Функция, которая предполагает освобождение памяти и закрытие программы:

void Wyjscie(GtkWindow* window, GdkEvent* event, StrukturaDrawing* data)
{
 gtk_main_quit();
 free(data);
 data = NULL;
}

Любая помощь действительно приветствуется.

Ответы [ 2 ]

0 голосов
/ 09 января 2011

Сигнал "destroy" имеет другую сигнатуру для своего обратного вызова, чем ваша функция Wyjscie. Может быть, вы предпочитаете "событие уничтожения" GtkWidget, см. Документы здесь

Если вы хотите событие «уничтожить» GtkObject, см. здесь , вам нужно изменить свой обратный вызов на

void Wyjscie(GtkObject* window,StrukturaDrawing* data)
{
 gtk_main_quit();
 free(data);
}
0 голосов
/ 09 января 2011

Хорошо отлаженная структура данных отладки имеет следующие значения: первое имеет: PoziomaLinijka CXX0017: ошибка: символ "" не найден, а позже все остальные имеют: PionowaLinijka CXX0030: ошибка: выражение не может быть оценено

Oh: Я тот, кто задал вопрос, извините за путаницу с никами.

...