日期:2014-05-16  浏览次数:20708 次

gtk_entry_get_text出现段错误
小弟初学gtk,我用的是 gtk+-2.0
对一个entry控件键入 enter时相应回调函数
回调函数如下

133 /* when you press the Enter key int entry_localwd call this function*/
134 void* response_entry_enter(GtkWidget *widget, GdkEvent *event, gpointer data)
135 {
136         GtkEntry * value = data;  
137         char path[100];
138         strcpy(path,gtk_entry_get_text(GTK_ENTRY(widget)));
139         printf("%s\n",path);      
     }


信号关联函数如下

 g_signal_connect(entry_localwd,"activate",G_CALLBACK(response_entry_enter),&entry_localwd);


当我将 138行的 widget 改为 value(即entry_localwd)时出现段错误,但是用widget,未出现段错误
其实这是测试代码,原来给  g_signal_connect()传的是一个结构体变量,entry_localwd也是成员变量之一,
在赋值是 也是在gtk_entry_get_text(GTK_ENTRY(data->entry))出现段错误,其他的成员变量赋值未出现问题,不知到为什么?
懂得麻烦讲解一下,在此谢过!
gtk signal callback

------解决方案--------------------
请楼主贴出代码
------解决方案--------------------
你那个是要传自己吗?  没有必要吧,回调函数response_entry_enter中第一个参数就是信号源的控件了,有它不就够了吗?

可以gdb里面看下,传过去的最后一个参数可能解析有问题,设个断点看下它的值。

g_signal_connect(entry_localwd,"activate",G_CALLBACK(response_entry_enter),&entry_localwd);
是否要改为: g_signal_connect((G_OBJECT)entry_localwd,"activate",G_CALLBACK(response_entry_enter),(gpointer)entry_localwd);

最好是把你的问题整理出一个简单的可复现的demo程序,放下源码和编译参数之类的。