关闭主文件时的段错误 window

segfault when closing a file on the destruction of the main window

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

您没有检查 fopen 是否失败。也许这会透露更多信息?如果它确实失败了,那么您将向 gtk_signal_connect.

传递一个空指针

您可能必须给出 gtk_signal_connect "config_file" 而不是“&config_file”,因为它已经是一个指针。

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