Я пытаюсь отправить указатель на структуру, которую я создал для функции, используя g_signal_connect , но получаю ошибку сегментации.После некоторого тестирования я решил напечатать адрес указателя внутри вызываемой функции (эта функция отвечает за рисование в Drawing_area, что означает, что он вызывается регулярно через g_timeout_add )и, поочередно, он печатает «(ноль)» или правильный адрес.Я понятия не имею, что может быть причиной этого.
typedef struct{
...
}prog_info
gboolean on_draw_event(GtkWidget *draw_area ,
cairo_t *cr ,
prog_info *info)
{
printf("\ninfo: %p",info); //this will give "(nil)" or the correct
address, alternating
...
}
gboolean time_handler (GtkWidget *draw_area)
{
if ((!GTK_IS_WIDGET(draw_area)) || (!gtk_widget_get_window (draw_area)))
return FALSE;
gtk_widget_queue_draw(draw_area);
return TRUE;
}
int main(int argc, char *argv[]) {
...
prog_info *info;
info =(prog_info *) calloc (1,sizeof(prog_info));
...
g_signal_connect(G_OBJECT(draw_area), "draw", G_CALLBACK(on_draw_event), info);
g_timeout_add (10, (GSourceFunc) time_handler, draw_area);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
Решено
Было два разных g_signal_connect , один из которых былвсе разрушает.