如何释放内存?

时间:2014-07-07 23:24:28

标签: c memory-management memory-leaks gtk

我有这段代码:

#include <gtk/gtk.h>

int main(int argc, char *argv[])
{
    GtkWidget *window, *fixed, *button;

    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
    gtk_widget_set_size_request(window, 400, 400);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_window_set_title(GTK_WINDOW(window), "Test");
    gtk_widget_show(window);
    g_signal_connect(G_OBJECT(window), "destroy", 
                     G_CALLBACK(gtk_main_quit), NULL);

    fixed = gtk_fixed_new();
    gtk_container_add(GTK_CONTAINER(window), fixed);
    gtk_widget_show(fixed);

    button = gtk_button_new_with_label("click");
    gtk_fixed_put(GTK_FIXED(fixed), button, 30, 30);
    gtk_widget_show(button);

    gtk_main();

    return 0;
}

我试图释放内存,但失败了。也许有人修改这段代码,以便释放内存? 我读到了GTK中的内存管理,我在很大程度上理解它是如何工作的,但却未能释放内存......

我理解这些函数如何工作gtk_widget_destroy(),g_object_ref_seek(),g_object_ref()和g_object_unref()并且我不想在这些函数或文档中接收引用,我希望修改某人此代码这样就要释放内存。

感谢!

1 个答案:

答案 0 :(得分:2)

您已将gtk_main_quit连接到窗口。当窗口被摧毁时,她的所有子窗口小部件也被销毁。