I am trying to learn gtkmm and decided to try gtkmm 2.4 at the moment, as it seems pretty difficult to get 3.0 working on Debian. Anyway, the example I'm trying to do is the following: http://developer.gnome.org/gtkmm-tutorial/2.24/sec-helloworld.html.en . It compiles fine and it works well, but when I close it, valgrind reports a lot of leaks, something like this (after clicking the button once):
==4254== Memcheck, a memory error detector ==4254== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al. ==4254== Using Valgrind-3.6.0.SVN-Debian and LibVEX; rerun with -h for copyright info ==4254== Command: ./bin/jmb ==4254== Hello World ==4254== ==4254== HEAP SUMMARY: ==4254== in use at exit: 942,940 bytes in 7,968 blocks ==4254== total heap usage: 14,191 allocs, 6,223 frees, 3,272,961 bytes allocated ==4254== ==4254== LEAK SUMMARY: ==4254== definitely lost: 2,620 bytes in 6 blocks ==4254== indirectly lost: 5,936 bytes in 187 blocks ==4254== possibly lost: 358,625 bytes in 1,775 blocks ==4254== still reachable: 575,759 bytes in 6,000 blocks ==4254== suppressed: 0 bytes in 0 blocks ==4254== Rerun with
This will happen if I stop the program using Cc or click the close window button (in this case I have to use Shift-Meta-C to close the window due to the window manager). Is this an expected behavior, such as a MySQL connector, that prevents this last pointer from being deleted? In this case, it seems that most of the memory cannot be "allowed" for deletion? Or did I just miss something really simple?
For the sake of this, here is my code: (Changed by HelloWorld for testing) main.cpp:
#include "gui/Test.hpp" #include <gtkmm/main.h> int main(int argc, char **argv) { Gtk::Main kit(argc, argv); Test t; Gtk::Main::run(t); return 0; }
Test.hpp:
#pragma once #include <gtkmm/button.h> #include <gtkmm/window.h> class Test : public Gtk::Window { public: Test(); virtual ~Test(); protected: //Signal handlers: void on_button_clicked(); //Member widgets: Gtk::Button m_button; };
test.cpp:
#include "Test.hpp"
Thanks in advance!