freeing GTK+ memory
- From: Pablo Yanez Trujillo <yanezp informatik uni-freiburg de>
- To: gtk-list gnome org
- Subject: freeing GTK+ memory
- Date: Thu, 16 Oct 2008 20:55:04 +0200
-----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-----
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]