gpt4 book ai didi

c - GTK+2 : My App is Crashing on quit

转载 作者:行者123 更新时间:2023-11-30 15:29:31 25 4
gpt4 key购买 nike

嗨,我正在编写一个简单文本编辑器,我使用此回调来处理主窗口删除事件

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)

并且认为你。

最佳答案

您的delete-event回调签名错误。它应该返回一个 bool 值来表示窗口是否被删除。

gboolean quit (GtkWidget *wid, GdkEvent *e, gpointer user_data)
{
. . .
return TRUE;
}

参见https://developer.gnome.org/gtk3/stable/GtkWidget.html#GtkWidget-delete-event了解更多详情

关于c - GTK+2 : My App is Crashing on quit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26216079/

25 4 0
文章推荐: javascript - 通过多个键对对象数组进行分组
文章推荐: c# - MVC如何为大型结果集添加分页
文章推荐: javascript - Vue.js