我看过GTK+ g_pointer_connect passing data incorrectly,但是即使尝试按照人们的指示去做,我的问题仍然存在。
我需要做的是从数组数组中传递一个数组。
声明此数组的代码在这里
int **BtnLoc = malloc(sizeof(int*) * 9);
for (int i = 0; i < 9; i++) {
BtnLoc[i] = malloc(sizeof(*BtnLoc[i]) * 3);
}
使用此代码的是这个
unsigned int counter = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
int x[2] = {i, j};
BtnLoc[counter] = x;
buttons[i][j] = gtk_button_new();
gtk_table_attach_defaults(
GTK_TABLE(table),
buttons[i][j],
i, i+1, j, j+1
);
g_signal_connect(
buttons[i][j],
"clicked",
G_CALLBACK(Toggled),
BtnLoc[counter]
);
counter++;
}
}
在Toggled()
函数中,它打印x[0]
和x[1]
,但不是完全是0、1或2和1,而是像-1924531234和24539这样的完整垃圾。
答案 0 :(得分:0)
您的代码没有意义。首先声明一个9指针数组,该指针指向3个整数的数组,然后以完全不同的方式填充它。您要在告诉编译器的地方分配整数,该整数将存储指向整数的指针。
所以我想你想要什么而不是
BtnLoc[counter] = x;
是:
*BtnLoc[counter] = x;
这仍然存在问题:您创建了一个包含每个3个整数的数组数组,但是仅初始化了2个,因此第三个内存位置的内容未定义。
只需使用GLib中提供的动态数组类型(例如GArray或GptrArray)并避免这些问题,因为这通常会使代码更易于阅读。
编辑:
似乎是XY problem。您似乎想将按钮位置存储在数组中,但我不明白为什么要这样做。