GtkSwitch的回调在访问传递的数据时是分段错误的



我在我的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参数。

添加后,它可以完美地工作。

最新更新