【发布时间】:2018-01-06 17:02:38
【问题描述】:
我正在尝试使用 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");
...
文本视图和按钮附加到一个小部件,然后由该函数返回。我的两个回调方法都存在但当前为空。当我运行该程序时,我在g_signal_connect() 调用上遇到了段错误(它们中的任何一个都会这样做)。我在 gdb 中进行了测试,它似乎表明所有三个小部件 textBox、sendButton 和 createAccount 都是有效的,但我不确定。有什么想法吗?
【问题讨论】:
-
“有效”是什么意思?如果你的意思是一个值!= 0 他们仍然可以包含垃圾......
-
嗯,好点。他们指出了看似正常(不是 100% 确定标准是什么)的位置,如果我不给它们一个回调函数,它们就会正确显示在 UI 上。如何测试 main 内部的指针是否仍然正确?
-
C 不知道 “按引用传递”,它按值传递所有内容。您传递的值可以是值本身(int、char 或其他类型),也可以是值的内存地址(指针,也可以按值传递)