在销毁主窗口时关闭文件时出现段错误

时间:2015-12-03 20:15:42

标签: c gtk

我正在编写一个对文件执行某些操作的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相关

2 个答案:

答案 0 :(得分:1)

您可能需要提供gtk_signal_connect" config_file"而不是"& config_file",因为它已经是一个指针。

在你的评论中,你写了fclose((FILE *)& config_file);这也是错误的,请将其保留在问题中所述的原始代码中

答案 1 :(得分:0)

您没有检查fopen是否失败。也许这会揭示更多信息?如果它确实失败了,那么你将一个空指针传递给gtk_signal_connect