我在我的Glade UI文件中放置了一个GtkSwitch(它的目标是GTK-3.24,没有警告),并将包含一些数据的结构体作为参数传递。信号为on_switch1_state_set
main.h包含:
typedef struct _MyData MyData;
struct _MyData {
GtkWidget *switch1;
int value;
}
int on_switch1_state_set (GtkSwitch *, MyData *);
c包含:
data->switch1 = GTK_WIDGET (gtk_builder_get_object (builder, "switch1"));
data->value = 0;
callbacks.c包含:
int on_switch1_state_set (GtkSwitch *switch1, MyData *data) {
fprintf (stdout, "%in", data->value);
return (EXIT_SUCCESS);
}
由于某种原因,这个段在fprintf上出现了错误,我不知道为什么。我将此解释为指向该结构的指针已被损坏。如果在回调中我只写
fprintf (stdout, "Daven");
,但这当然不是访问我的数据结构。我在这个程序中有许多其他的回调函数,它们有来自条目、复选按钮、单选按钮、自旋按钮等的信号,它们都可以从结构体中操纵数据。只有开关有问题。
为什么访问结构会导致GtkSwitch回调中的段错误?
嗯,我找到了GtkSwitch
信号的GTK 3文档。
实际上有三个参数(不是两个,像我一样):
gboolean
state_set (
GtkSwitch* self,
gboolean state,
gpointer user_data
)
我漏掉了gboolean state
参数。
添加后,它可以完美地工作。