Hi,
I'm trying to find a way to test for memory leaks in GTK+ apps. I've created a
very simple HelloWorld app and profiled it with valgrind.
The source code and the valgrind output are attached.
I have run valgrind as:
G_SLICE=always-malloc G_DEBUG=gc-friendly \
valgrind --tool=memcheck --leak-check=full --leak-resolution=high \
-num-callers=20 ./helloworld &> helloworld.out
The result was:
==15450== LEAK SUMMARY:
==15450== definitely lost: 429 bytes in 5 blocks.
==15450== indirectly lost: 180 bytes in 13 blocks.
==15450== possibly lost: 800 bytes in 20 blocks.
==15450== still reachable: 362,035 bytes in 9,875 blocks.
==15450== suppressed: 0 bytes in 0 blocks.
I'm surprised that even for such a simple program I still get memory leaks. So
I'm probably doing something wrong.
Here are the gtk/glib versions I used:
$ pkg-config gtk+-2.0 --modversion
2.12.9
$ pkg-config glib-2.0 --modversion
2.16.3
I am using Debian unstable. The exact packages I'm using are:
libglib2.0-dev 2.16.3-2
libgtk2.0-dev 2.12.9-3
valgrind 1:3.3.0-1
Please help me check for memory leaks in GTK.
Is valgrind the tool of choice for testing memory leaks with gtk? Is there
other free better tool?
Thanx.
Johnny
#include <gtk/gtk.h>
static void destroy(GtkWidget*, gpointer);
int main(int argc, char* argv[])
{
gtk_init(&argc, &argv);
GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Hellow World");
gtk_widget_show(window);
g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy), NULL);
gtk_main();
return 0;
}
void destroy(GtkWidget* window, gpointer data)
{
gtk_main_quit();
}
Attachment:
helloworld.out.zip
Description: Zip archive