C语言 如何在GUI应用程序中释放分配的内存



我有一个用C/gtk+(v 2.x)编写的GUI应用程序。如果我单击主窗口的菜单项,将调用以下函数并显示一个对话框。

dialog_ui * create_dialog ()
{
    dlg = malloc (sizeof(dialog_ui));
    dlg->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    ...
    gtk_widget_show_all (dlg->window);
    return dlg;
}

这是dialog_ui结构

typedef struct _dialog_ui
{
    GtkWidget * window;
    ...
} dialog_ui;

这是头文件中的dlg变量。

dialog_ui * dlg;

我的问题是,我在create_dialog函数中调用malloc。但是我不知道从哪里可以调用free,因为GUI是事件驱动的。我想过destroy-event,但我想知道正确的方法。任何想法..?

通常,您有一个模态对话框,您可以使用gtk_dialog_run()而不是gtk_widget_show()来调用该对话框。gtk_dialog_run()函数在用户关闭对话框之前不会返回,返回一个响应,您可以使用该响应来确定他们是否单击了"是"、"确定"、"取消"、"关闭"等。您可以在 GtkDialog API 文档中看到一个示例。

由于您只是显示自己的GtkWindow,因此您的主应用程序代码可以连接到GtkWindow"destroy"信号,并释放引用该小部件的结构。

作为旁注,与其使用 malloc ,不如看一下 GLib 提供的一些内存分配功能。

当您不再需要该对话框并且不再访问它时(例如,当它关闭时),您可以释放分配的内存。在销毁事件中执行此操作是一个好地方。

相关内容

  • 没有找到相关文章

最新更新