我正在编写一个对文件执行某些操作的GTK应用程序,我有以下代码:
gtk_init(&argc, &argv);
FILE *config_file;
config_file=fopen("home/user/config","r");
gtk_signal_connect (GTK_OBJECT (main_window), "destroy",GTK_SIGNAL_FUNC (destroy), &config_file);
和破坏功能:
void destroy(GtkWidget *widget, gpointer config_file) {
fclose((FILE *)config_file);
gtk_main_quit ();
}
在gdb中运行程序会产生以下回溯:
(gdb) backtrace
#0 0x0000003696072831 in _IO_new_file_close_it () from /lib64/libc.so.6
#1 0x00000036960664f8 in fclose@@GLIBC_2.2.5 () from /lib64/libc.so.6
我省略了输出的其余部分,因为它与gtk相关
答案 0 :(得分:1)
您可能需要提供gtk_signal_connect" config_file"而不是"& config_file",因为它已经是一个指针。
在你的评论中,你写了fclose((FILE *)& config_file);这也是错误的,请将其保留在问题中所述的原始代码中
答案 1 :(得分:0)
您没有检查fopen
是否失败。也许这会揭示更多信息?如果它确实失败了,那么你将一个空指针传递给gtk_signal_connect
。