GTK上g_signal_connect的怪异行为

时间:2018-12-28 02:13:23

标签: c gtk

我正在尝试向我使用 g_signal_connect 创建的函数发送结构的指针,但是遇到了分段错误。经过一些测试,我决定将指针的地址打印在被调用的函数内(此函数负责在drawing_area上进行绘制,这意味着它定期通过 g_timeout_add 进行调用>),并交替打印“(nil)”或正确的地址。我不知道是什么原因造成的。

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 ,其中之一破坏了一切。

0 个答案:

没有答案