gpt4 book ai didi

c - 通过与 C 和 GTK+ 的引用混淆?

转载 作者:太空宇宙 更新时间:2023-11-04 08:27:45 24 4
gpt4 key购买 nike

我正在尝试使用 GTK+ 获得一个非常简单的 UI。我想我遇到了一些与 C 和按引用传递有关的问题。

这是我主要的一些代码:

...
GtkWidget *controlArea;
GtkWidget *sendButton;
GtkWidget *createAccountButton;
GtkWidget *textBox;
...
controlArea = create_control_area(sendButton, createAccountButton, textBox);
...
g_signal_connect(sendButton, GTK_CALLBACK(send), textBox);
g_signal_connect(createAccountButton, GTK_CALLBACK(createAccount), NULL);
...

这里是 create_control_area() 函数的一些代码:

...
textBox = gtk_text_view_new();
...
sendButton = gtk_button_new_with_label("Send Message");
createAccount = gtk_button_new_with_label("Create Account");
...

TextView 和按钮附加到一个小部件,然后由该函数返回。我的两个回调方法都存在,但目前是空的。当我运行该程序时,我在 g_signal_connect() 调用中遇到了段错误(它们中的任何一个都会发生)。我在 gdb 中进行了测试,它似乎表明所有三个小部件、textBox、sendButton 和 createAccount 都是有效的,但我不确定。有什么想法吗?

最佳答案

您遇到的问题是您传递给函数的指针是按值传递的,即它们被复制,并且更改函数内部指针的本地副本当然不会更改原始指针。

解决方案是通过引用传递指针,不幸的是,C 不支持这种方法,但可以使用指针来模拟。所以你必须在调用函数时使用寻址运算符 & 将指针传递给指针:

controlArea = create_control_area(&sendButton, &createAccountButton, &textBox);

当然,您必须修改函数以将指针指向指针,并在分配给指针时使用取消引用运算符*

*textBox = gtk_text_view_new();
...
*sendButton = gtk_button_new_with_label("Send Message");
*createAccount = gtk_button_new_with_label("Create Account");

关于c - 通过与 C 和 GTK+ 的引用混淆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29676642/

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