gpt4 book ai didi

c - 将数组传递给函数 - 不同的值 - 段错误

转载 作者:行者123 更新时间:2023-11-30 16:28:49 25 4
gpt4 key购买 nike

我有以下代码:

gpointer w[3];
GtkWidget *menu_item = gtk_menu_item_new();
w[0] = menu_item;
menu_item = gtk_menu_item_new();
w[1] = menu_item;
GtkTextBuffer *buffer = gtk_text_buffer_new(NULL);
w[2] = buffer;

到目前为止一切都很好。现在让我们连接一个信号:

g_signal_connect(w[0], "activate", G_CALLBACK(runner), w);

runner函数声明为:

void runner(gpointer root, gpointer w[]);

测试 w 的值输入之前的数组runner而其中表明它们(值(value)观)是不同的。我需要它们是一样的。我怎样才能做到这一点,为什么它们不相同?此外,还会发生段错误。

<小时/>我创建了一个小程序,它是原始程序的基本框架,并且应该重新创建导致问题发生的条件。奇怪的是,它运行良好。

#include <gtk/gtk.h>

void carry(gpointer root, gpointer a[])
{
g_print("\n");
g_print("%d\n", root);
g_print("%d\n", a[0]);
g_print("%d\n", a[1]);
g_print("%d\n", a[2]);
}

int main(int argc, char **argv)
{
gtk_init(&argc, &argv);

GtkWidget *menu_item;
GtkTextBuffer *buffer;
gpointer abc[3];

menu_item = gtk_menu_item_new();
abc[0] = menu_item;
g_print("%d\t%d\n", menu_item, abc[0]);
menu_item = gtk_menu_item_new();
abc[1] = menu_item;
g_print("%d\t%d\n", menu_item, abc[1]);
buffer = gtk_text_buffer_new(NULL);
abc[2] = buffer;
g_print("%d\t%d\n", buffer, abc[2]);

g_signal_connect(abc[2], "modified-changed", G_CALLBACK(carry), abc);

gtk_text_buffer_set_modified(abc[2], TRUE);

gtk_main();

return 0;
}

这意味着还有其他问题。我现在会尝试其他方法,例如注释行并仅保留相关行。

<小时/>我还没有评论任何行,但我尝试输入 g_print在调用者和被调用者中。

这是一个输出:

1162863440  1162863440
1162864736 1162864736
1163320992 1163320992

1162863440
-2
1162668992
973486176

前三行将原始值与其在数组中的副本进行比较(从上面代码中的 g_print("%d\t%d\n", menu_item, abc[0]); 的意义上来说)。如您所见,一切都已正确分配。在新行之后,我们检查被调用者中的相同值。 root ,第一个参数,始终具有正确的值。所以这没有问题。 abc[0]被调用者始终的值为-2。说真的,每次我运行该程序时,它都是-2。其他两个( abc[1]abc[2] )总是有一些垃圾随机值,但每次我运行程序时它们都会改变,这与 abc[0] 不同。 .

我希望这将有助于诊断和解决问题。

最佳答案

我尝试通过函数正常传递 abc[0]abc (func(arg0, arg1, ...)使用g_signal_connect())并且没有任何问题

这一切只能意味着一件事:g_signal_connect 正在扰乱我的值(value)观。它出于某种未知的原因改变了它们。

我想我必须使用一个结构。

关于c - 将数组传递给函数 - 不同的值 - 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52212529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com