我不确定这里是否存在内存泄漏 - 它是关于在GTK中退出一个简单的弹出窗口。
if (alertWindow == NULL) {
alertWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
alertLabel = gtk_label_new (" wrong input! connection should be either s,S,p or P.\n All other data as floating numbers" );
gtk_container_add(GTK_CONTAINER(alertWindow), alertLabel);
g_signal_connect (alertWindow, "destroy", G_CALLBACK (destroyAlert), NULL); //avslutar applikation
}
和回调
static void destroyAlert(GtkWidget *widget, gpointer data) {
alertWindow = NULL;
}
我将alertWindow设置为NULL,以便下次用户输入错误输入时再次创建它。
答案 0 :(得分:1)
那不应该泄漏内存。该窗口假定对标签的引用,因此标签将被销毁并通过窗口释放。当您单击窗口标题栏的关闭按钮(这是根据您拥有的代码关闭该窗口的唯一方法)时,窗口将被销毁并释放。
但是,我建议采用不同的方式:
GtkWidget *alertWindow = gtk_message_dialog_new(parentWindow,
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_USE_HEADER_BAR,
GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE,
"Wrong input! Connection should be either s, S, p or P.\n"
"All other data as floating point numbers.");
gtk_dialog_run(GTK_DIALOG(alertWindow));
gtk_widget_destroy(alertWindow);
这有一些优点;首先,您将获得一个功能更全面的对话框,其中包含一个用于关闭它的友好按钮。其次,您不必使用全局变量,然后必须担心它是否为NULL。第三,对话框是模态的(对话框打开时应用程序的其余部分被禁用),这适用于这样的错误消息。
更好的方法是在用户输入时检测错误的输入,并使用类似GtkPopover的信息来告知他们每个字段中属于哪种输入。