2014-10-06 103 views
0

嗨,我是绑写一个简单的文本编辑器,我用这个回调来处理主窗口中删除事件GTK + 2:我的应用程序崩溃上退出

g_signal_connect(G_OBJECT(mainWindow),"delete-event",G_CALLBACK(quit), (gpointer)textView); 

,这是我的回调函数来处理此事件

void quit(GtkWidget *wid,GdkEvent *e,gpointer data) 
{ 
    GtkTextIter iStart,iEnd; 
    GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textView)); 
    gtk_text_buffer_get_bounds(buffer,&iStart,&iEnd); 
    gchar * text = gtk_text_buffer_get_text(buffer,&iStart,&iEnd,FALSE); 
    if(docFile.isSaved == FALSE && strcmp("",text)) 
    { 
     GtkWidget * msgDialog; 
     msgDialog = gtk_message_dialog_new(NULL, 
              GTK_DIALOG_MODAL, 
              GTK_MESSAGE_QUESTION, 
              GTK_BUTTONS_YES_NO, 
              "Do you manna save your file ?", 
              NULL); 

     switch (gtk_dialog_run (GTK_DIALOG(msgDialog))) 
     { 
      case GTK_RESPONSE_YES: 
       if(docFile.name == NULL) 
       { 
        if(saveAs(textView)) 
        { 
         gtk_widget_destroy (msgDialog); 
         gtk_main_quit(); 
        } 
       } 
       else 
       { 
        save(textView); 
        gtk_widget_destroy (msgDialog); 
        gtk_main_quit(); 
       } 
       break; 
      case GTK_RESPONSE_NO: 
        gtk_widget_destroy (msgDialog); 
        gtk_main_quit(); 

     } 
    }else{ 
      gtk_main_quit(); 
     } 
} 

,但是当我在我的终端退出我发现这个窗口

(Black Hole) adil Tux : SimpleEditor 
>>>> ./a.out 
*** Error in `./a.out': free(): invalid pointer: 0x0000000000604570 *** 
======= Backtrace: ========= 
/usr/lib/libc.so.6(+0x7340e)[0x7fefc476a40e] 
/usr/lib/libc.so.6(+0x7884e)[0x7fefc476f84e] 
/usr/lib/libc.so.6(+0x7900b)[0x7fefc477000b] 
./a.out[0x402ad0] 
/usr/lib/libc.so.6(__libc_start_main+0xf0)[0x7fefc4717040] 
./a.out[0x402069] 
======= Memory map: ======== 
00400000-00404000 r-xp 00000000 08:06 2107681       /home/adil/Src/SimpleEditor/a.out 
00604000-00605000 rw-p 00004000 08:06 2107681       /home/adil/Src/SimpleEditor/a.out 
01a38000-01b83000 rw-p 00000000 00:00 0 
          [heap] 
.... 

7fefc736b000-7fefc736c000 rw-p 00022000 08:06 920725      /usr/lib/ld-2.20.so 
7fefc736c000-7fefc736d000 rw-p 00000000 00:00 0 
7fff6fd1c000-7fff6fd3d000 rw-p 00000000 00:00 0       [stack] 
7fff6fdfc000-7fff6fdfe000 r-xp 00000000 00:00 0       [vdso] 
7fff6fdfe000-7fff6fe00000 r--p 00000000 00:00 0       [vvar] 
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0     [vsyscall] 
Aborted (core dumped) 

,并认为你。

+0

构建会显示文件名,函数名以及的代码中的崩溃发生的地点的行号。您可以通过将'-g'标志添加到gcc来添加调试信息。 – 2014-10-06 12:23:41

+0

如果您有更新的信息,请更新您的问题,而不是尝试将大量文本塞进评论中。 – 2014-10-06 12:58:40

回答

0

给予一瞥,我可以当场你没有把break;语句的情况下GTK_RESPONSE_YES结束,也许您拨打gtk_widget_destroygtk_main_quit功能的两倍。

+0

我尝试把休息;但错误仍然发现我尝试还删除gtk_widget_destroy(msgDialog);但无论如何没有解决方案会有很多想法:p – 2014-10-06 12:47:05