在c中初始化GtkImage

在c中初始化GtkImage,c,gtk,gtk3,C,Gtk,Gtk3,当我试图将Gtkwidget指向从文件加载png的内存地址时,遇到了分段错误。我希望卡[6]。图像显示我在卡[0]中加载的图像。图像和要从卡[0]中删除的图像相同。图像 图像最初显示正确,但当触发器卡1\u选中此线路卡[6]时。图像=卡[0]。图像;产生分段错误。 我不确定是否正确加载了图像,以及如何使用相同的小部件加载另一个图像;我还尝试使用函数/*gtk_image_set_from_fileGTK_IMAGEcard[6]。image,card[0]。path;*具有相同的效果。按钮按下事

当我试图将Gtkwidget指向从文件加载png的内存地址时,遇到了分段错误。我希望卡[6]。图像显示我在卡[0]中加载的图像。图像和要从卡[0]中删除的图像相同。图像

图像最初显示正确,但当触发器卡1\u选中此线路卡[6]时。图像=卡[0]。图像;产生分段错误。
我不确定是否正确加载了图像,以及如何使用相同的小部件加载另一个图像;我还尝试使用函数/*gtk_image_set_from_fileGTK_IMAGEcard[6]。image,card[0]。path;*具有相同的效果。

按钮按下事件信号的回调函数定义不正确

下面的例子告诉我们它应该是什么样子:

// The “button-press-event” signal

gboolean
user_function (GtkWidget *widget,
               GdkEvent  *event,
               gpointer   user_data)
函数中缺少一个参数:

void card1_clicked (GtkWidget *window, struct my_image *card)
这意味着您正在使用事件指针读取卡阵列,这会导致一些非法读取访问


除此之外,您没有提供所需的布尔返回值。

卡在何处以及如何定义?printf是否显示了正确的结果?另外:代码中有一些输入错误:G_CALLfort应该是G_callback。对于单击的信号,回调签名看起来很好,但是对于像按钮按下这样的事件,在这种情况下,不仅缺少一个参数。还有返回类型。感谢您指出这一点。你是对的。我扩展了答案。
void card1_clicked (GtkWidget *window, struct my_image *card)