Hi, I'm trying to see how to use the Glib::OpenEntry. When I compile and run the attached program, valgrind complains on memory leaks when I use "OptionGroup::add_entry (const OptionEntry& entry, vecustrings& arg)". Is this a real leak? $ valgrind --leak-check=full options -b -s xxx -v aaa ... ==25883== 16 (12 direct, 4 indirect) bytes in 2 blocks are definitely lost in loss record 15 of 71 ==25883== at 0x4022AB8: malloc (vg_replace_malloc.c:207) ==25883== by 0x4A0471C: g_malloc (in /usr/lib/libglib-2.0.so.0.1600.3) ==25883== by 0x4959A9C: Glib::OptionGroup::CppOptionEntry::set_c_arg_default(void*) (in /usr/lib/libglibmm-2.4.so.1.0.24) ==25883== by 0x4959F43: Glib::OptionGroup::add_entry_with_wrapper(Glib::OptionEntry const&, GOptionArg, void*) (in /usr/lib/libglibmm-2.4.so.1.0.24) ==25883== by 0x495A142: Glib::OptionGroup::add_entry(Glib::OptionEntry const&, std::vector<Glib::ustring, std::allocator<Glib::ustring> >&) (in /usr/lib/libglibmm-2.4.so.1.0.24) ==25883== by 0x804A688: main (main.cc:40) ==25883== ... ==25883== LEAK SUMMARY: ==25883== definitely lost: 12 bytes in 2 blocks. ==25883== indirectly lost: 4 bytes in 1 blocks. ==25883== possibly lost: 25,976 bytes in 41 blocks. ==25883== still reachable: 177,160 bytes in 3,359 blocks. ==25883== suppressed: 0 bytes in 0 blocks. ==25883== Reachable blocks (those to which a pointer was found) are not shown. ==25883== To see them, rerun with: --leak-check=full --show-reachable=yes Are the 'possibly lost' and 'still reachable' important? If not, can they be suppressed somehow? Thanx, Johnny
#include <gtkmm.h> #include <iostream> #include <vector> int main(int argc, char *argv[]) { bool b = false; int x = 0; Glib::ustring s; std::vector<Glib::ustring> v; Glib::OptionEntry oeb; oeb.set_long_name("bool"); oeb.set_short_name('b'); oeb.set_description("option bool"); oeb.set_arg_description("BOOL"); Glib::OptionEntry oex; oex.set_long_name("int"); oex.set_short_name('x'); oex.set_description("option integer"); oex.set_arg_description("INT"); Glib::OptionEntry oes; oes.set_long_name("str"); oes.set_short_name('s'); oes.set_description("option string"); oes.set_arg_description("STR"); Glib::OptionEntry oev; oev.set_long_name("vector"); oev.set_short_name('v'); oev.set_description("option vector"); oev.set_arg_description("STR"); Glib::OptionGroup og("og", "og description", "help og"); og.add_entry(oeb, b); og.add_entry(oex, x); og.add_entry(oes, s); og.add_entry(oev, v); Glib::OptionContext octx("000 parameter string 000"); octx.set_summary("111 summary 111"); octx.set_description("222 description 222"); octx.add_group(og); try { Gtk::Main kit(argc, argv, octx); std::cout << "option oeb: " << b << std::endl; std::cout << "option oex: " << x << std::endl; std::cout << "option oes: " << s << std::endl; for(int i=0; i < v.size(); ++i) { std::cout << "option oev[" << i << "]: " << v[i] << std::endl; } for(int i=0; i < argc; ++i) { std::cout << "argv[" << i << "]: " << argv[i] << std::endl; } } catch(Glib::OptionError& err) { std::cout << err.what() << "\n\n" << octx.get_help() << "\n"; } return 0; }
Attachment:
signature.asc
Description: This is a digitally signed message part.