Mam problem z danymi przesyłanymi przez gpointer w gtk. Zaalokowane dane nie są dobrze interpretowane (lub przekazywane) do funkcji, która wywoływana jest przy naciśnięciu przycisku. Oto mój kod:
typedef struct Pakiet{
Kontroler * kontroler;
int wcisniety_x;
int wcisniety_y;
}Pakiet;
struct Kontroler{
Ekran * ekran;
Plansza * plansza;
int zaznaczony_x,zaznaczony_y;
bool zaznaczony;
};
void wybierz_pole(GtkWidget * widget,gpointer data){
Pakiet* pakiet = (Pakiet*)data;
printf("Pakiet nie jest poprawny. Dowód: pakiet->wcisiniety_x = %d\n",pakiet->wcisniety_x);
//Po nacisnieciu wyswietlilo: 377753484
//W tej czesci kodu odnosze sie do elementu kontroler co powoduje wywalenie sie programu
}
Kontroler * stworz_kontroler(Ekran * ekran,Plansza * plansza){
Kontroler * nowy = (Kontroler*)malloc(sizeof(Kontroler));
nowy->ekran = ekran;
nowy->plansza = plansza;
nowy->zaznaczony=false;
nowy->zaznaczony_x=0;
nowy->zaznaczony_y=0;
//Podlaczanie ramek pod kontroler
Pakiet * pakiet;
for(int x = 0; x < zwroc_szerokosc(plansza);x++){
for(int y = 0; y < zwroc_wysokosc(plansza);y++){
pakiet = (Pakiet*)malloc(sizeof(Pakiet));
pakiet->wcisniety_x = x;
pakiet->wcisniety_y = y;
pakiet->kontroler = nowy;
g_signal_connect(G_OBJECT(zwroc_ramke(ekran,x,y)),"button_press_event",G_CALLBACK(wybierz_pole),(gpointer)pakiet);
}
}
odswiez(ekran,plansza);
return nowy;
}
Nigdzie poza tym kodem nie zmieniam callback'a ani też nie zwalniam pakietu.
Z góry dziękuję za pomoc.