【问题标题】:How to free the allocated memory in GUI application?如何释放 GUI 应用程序中分配的内存?
【发布时间】:2012-06-15 19:29:30
【问题描述】:

我有一个用 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,但我想知道正确的方法。有什么想法吗?

【问题讨论】:

    标签: c user-interface gtk malloc


    【解决方案1】:

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

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

    作为旁注,您可能想看看GLib 提供的一些Memory Allocation 函数,而不是使用malloc

    【讨论】:

      【解决方案2】:

      当您不再需要该对话框并且不再访问它时(例如当它关闭时),您可以释放分配的内存。在destroy事件中这样做是个好地方。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-05
        • 2012-04-28
        • 2020-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多