-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi

all GTK classes have a create function and instances may be created with 
g_object_new as well. How can I free the memory
of widget's I don't need anymore? Does gtk_widget_destroy do the work for me?

I've written a small application
#include <gtk/gtk.h>

void quit_app(GtkWidget *widget, gpointer data)
{
        gtk_main_quit();
}

void killme(GtkButton *button, gpointer data)
{
        gtk_widget_destroy(GTK_WIDGET(data));
}

int main(int argc, char **argv)
{
        gtk_init(&argc, &argv);

        GtkWindow *window = g_object_new(GTK_TYPE_WINDOW,
                        "title", "Who does call g_free?",
                        NULL);

        g_signal_connect(window,
                        "destroy",
                        G_CALLBACK(quit_app),
                        NULL);

        GtkButton *button = g_object_new(GTK_TYPE_BUTTON,
                        "label", "kill me", NULL);
        g_signal_connect(button, "clicked", G_CALLBACK(killme), window);
        gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(button));

        gtk_widget_show_all(GTK_WIDGET(window));
        gtk_main();
        return 0;
}


When I run it with valgrind I get
==11838== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 33 from 2)
==11838== malloc/free: in use at exit: 407,811 bytes in 6,544 blocks.
==11838== malloc/free: 42,041 allocs, 35,497 frees, 11,626,260 bytes allocated.
==11838== For counts of detected errors, rerun with: -v
==11838== searching for pointers to 6,544 not-freed blocks.
==11838== checked 585,612 bytes.
==11838==
==11838== LEAK SUMMARY:
==11838==    definitely lost: 25,376 bytes in 893 blocks.
==11838==      possibly lost: 71,496 bytes in 79 blocks.
==11838==    still reachable: 310,939 bytes in 5,572 blocks.
==11838==         suppressed: 0 bytes in 0 blocks.
==11838== Rerun with --leak-check=full to see details of leaked memory.

6500 non-freed blocks? It seems "a lot" for me. Even a small programm like

int main(int argc, char **argv) {gtk_init(&argc, &argv);return 0;} has 619 
non-free blocks. Why? Is there a function to
free this memory?

Some function tell me that I need to free the memory by myself. For example, 
yesterday I wrote

GtkLabel *label;
PangoAttrList *attrib_list = pango_attr_list_new();

PangoAttribute *attr = pango_attr_weight_new(PANGO_WEIGHT_BOLD);
pango_attr_list_insert(attrib_list, attr);

attr = pango_attr_foreground_new(21588, 4626, 50886);
pango_attr_list_insert(attrib_list, attr);

label = g_object_new(GTK_TYPE_LABEL,
    "label", "Select the desired drink and click the button",
    "attributes", attrib_list,
     NULL);

The pange documentation points to the fact that the memory reserved by 
pango_attr_weight_new, pango_attr_foreground_new,
etc. should be freed by the user using pango_attribute_destroy, etc. What 
happens if I do
gtk_widget_detroy(GTK_WIDGET(label))? Do I have to free the memory from pango 
by myself?

Regards
Pablo


- --
Pablo Yánez Trujillo
http://klingsor.informatik.uni-freiburg.de/
My public key: http://klingsor.informatik.uni-freiburg.de/gpg/supertux.asc
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.9 (GNU/Linux)

iEYEARECAAYFAkj3jggACgkQDzf8xo+0xRWG9ACg3WJ9y3aX12ADo27HfqGSSL7A
AlUAnAlln2+4dosliB3wqk8UCnvaEmIb
=1Sce
-----END PGP SIGNATURE-----
_______________________________________________
gtk-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-list

Reply via email to