Hi John, I ran my sample script through valgrind and it confirmed that the leaked memory is what's being used for strings in error messages. I'm including relevant parts of valgrind reports for different error conditions, but it turned out to be leaking more memory than I thought (1.6k per error message). Since the error is generated each time there is a check for a non-existing field it adds up quickly as there is no other way to check if a field is present on wxlua object or not.
I think the final error message in wxlua_wxLuaBindClass__index is unnecessary; without it it would behave exactly as Lua method/field calls behave in all other places: > wx.wxTextCtrl().Absent() [string "wx.wxTextCtrl().Absent()"]:1: attempt to call field 'Absent' (a nil value) > wx.wxTextCtrl():Absent() [string "wx.wxTextCtrl():Absent()"]:1: attempt to call method 'Absent' (a nil value) > wx.wxTextCtrl().Absent nil Here is the simple patch I'm proposing: diff --git a/wxLua/modules/wxlua/wxlbind.cpp b/wxLua/modules/wxlua/wxlbind.cpp index 105f603..2523292 100644 --- a/wxLua/modules/wxlua/wxlbind.cpp +++ b/wxLua/modules/wxlua/wxlbind.cpp @@ -227,12 +227,6 @@ int LUACALL wxlua_wxLuaBindClass__index(lua_State *L) } } - if (!found) - { - wxlua_error(L, wxString::Format(_("wxLua: Unable to call an unknown method '%s' on a '%s' type."), - lua2wx(name).c_str(), lua2wx(wxlClass ? wxlClass->name : "").c_str()).c_str()); - } - return result; } This doesn't fix the leak directly, but it eliminates one of the main cases that make the leak much more noticeable. I'm including reports for two conditions: incorrect parameters (wx.wxTextCtrl().DiscardEdits()) and non-string as the key (wx.wxTextCtrl()[{}]). They follow different branches, but leak about the same amount of memory. Paul. require "wx" local ctrl = wx.wxTextCtrl() for _ = 1, 1000 do pcall(function() return ctrl.DiscardEdits() end) end ==2610== 48,000 bytes in 1,000 blocks are definitely lost in loss record 3,788 of 3,796 ==2610== at 0x402C10B: operator new(unsigned int) (vg_replace_malloc.c:327) ==2610== by 0x5DE6386: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_Rep::_S_create(unsigned int, unsigned int, std::allocator<wchar_t> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x5DE85BE: wchar_t* std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_S_construct<wchar_t const*>(wchar_t const*, wchar_t const*, std::allocator<wchar_t> const&, std::forward_iterator_tag) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x5DE8736: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(wchar_t const*, std::allocator<wchar_t> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x4B5F018: wxString::wxString(char const*, wxMBConv const&) (in /home/paul/zbs/bin/linux/x86/libwx.so) ==2610== by 0x4B605CA: lua2wx(char const*) (wxllua.h:41) ==2610== by 0x4BB7969: wxlua_luaL_typename(lua_State*, int) (wxllua.cpp:939) ==2610== by 0x4BB50D6: wxlua_argerror(lua_State*, int, wxString const&) (wxllua.cpp:169) ==2610== by 0x4BB7D3E: wxluaT_getuserdatatype(lua_State*, int, int) (wxllua.cpp:1093) ==2610== by 0x4AAF381: wxLua_wxTextCtrl_DiscardEdits(lua_State*) (wxcore_controls.cpp:8270) ==2610== by 0x804F1CD: ??? (in /usr/bin/lua5.1) ==2610== by 0x805813A: ??? (in /usr/bin/lua5.1) ==2610== ==2610== 56,000 bytes in 1,000 blocks are definitely lost in loss record 3,789 of 3,796 ==2610== at 0x402C10B: operator new(unsigned int) (vg_replace_malloc.c:327) ==2610== by 0x5DE6386: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_Rep::_S_create(unsigned int, unsigned int, std::allocator<wchar_t> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x5DE85BE: wchar_t* std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_S_construct<wchar_t const*>(wchar_t const*, wchar_t const*, std::allocator<wchar_t> const&, std::forward_iterator_tag) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x5DE8736: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(wchar_t const*, std::allocator<wchar_t> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x4B5F018: wxString::wxString(char const*, wxMBConv const&) (in /home/paul/zbs/bin/linux/x86/libwx.so) ==2610== by 0x4B605CA: lua2wx(char const*) (wxllua.h:41) ==2610== by 0x4BB786F: wxluaT_typename(lua_State*, int) (wxllua.cpp:925) ==2610== by 0x4BB7CE4: wxluaT_getuserdatatype(lua_State*, int, int) (wxllua.cpp:1093) ==2610== by 0x4AAF381: wxLua_wxTextCtrl_DiscardEdits(lua_State*) (wxcore_controls.cpp:8270) ==2610== by 0x804F1CD: ??? (in /usr/bin/lua5.1) ==2610== by 0x805813A: ??? (in /usr/bin/lua5.1) ==2610== by 0x804F5B7: ??? (in /usr/bin/lua5.1) ==2610== ==2610== 68,000 bytes in 1,000 blocks are definitely lost in loss record 3,790 of 3,796 ==2610== at 0x402C10B: operator new(unsigned int) (vg_replace_malloc.c:327) ==2610== by 0x5DE6386: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_Rep::_S_create(unsigned int, unsigned int, std::allocator<wchar_t> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x5DE768F: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_Rep::_M_clone(std::allocator<wchar_t> const&, unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x5DE77BD: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::reserve(unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x4E4F2B0: reserve (string.h:1332) ==2610== by 0x4E4F2B0: Alloc (string.h:2195) ==2610== by 0x4E4F2B0: operator+(wchar_t const*, wxString const&) (string.cpp:695) ==2610== by 0x4BB7D03: wxluaT_getuserdatatype(lua_State*, int, int) (wxllua.cpp:1093) ==2610== by 0x4AAF381: wxLua_wxTextCtrl_DiscardEdits(lua_State*) (wxcore_controls.cpp:8270) ==2610== by 0x804F1CD: ??? (in /usr/bin/lua5.1) ==2610== by 0x805813A: ??? (in /usr/bin/lua5.1) ==2610== by 0x804F5B7: ??? (in /usr/bin/lua5.1) ==2610== by 0x804BAFF: ??? (in /usr/bin/lua5.1) ==2610== by 0x804E8F1: ??? (in /usr/bin/lua5.1) ==2610== ==2610== 72,000 bytes in 1,000 blocks are definitely lost in loss record 3,791 of 3,796 ==2610== at 0x402C10B: operator new(unsigned int) (vg_replace_malloc.c:327) ==2610== by 0x5DE6386: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_Rep::_S_create(unsigned int, unsigned int, std::allocator<wchar_t> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x5DE768F: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_Rep::_M_clone(std::allocator<wchar_t> const&, unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x5DE77BD: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::reserve(unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x4E4F1D8: reserve (string.h:1332) ==2610== by 0x4E4F1D8: Alloc (string.h:2195) ==2610== by 0x4E4F1D8: operator+(wxString const&, wchar_t const*) (string.cpp:663) ==2610== by 0x4BB7D22: wxluaT_getuserdatatype(lua_State*, int, int) (wxllua.cpp:1093) ==2610== by 0x4AAF381: wxLua_wxTextCtrl_DiscardEdits(lua_State*) (wxcore_controls.cpp:8270) ==2610== by 0x804F1CD: ??? (in /usr/bin/lua5.1) ==2610== by 0x805813A: ??? (in /usr/bin/lua5.1) ==2610== by 0x804F5B7: ??? (in /usr/bin/lua5.1) ==2610== by 0x804BAFF: ??? (in /usr/bin/lua5.1) ==2610== by 0x804E8F1: ??? (in /usr/bin/lua5.1) ==2610== ==2610== 119,880 bytes in 999 blocks are definitely lost in loss record 3,792 of 3,796 ==2610== at 0x402C10B: operator new(unsigned int) (vg_replace_malloc.c:327) ==2610== by 0x5DE6386: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_Rep::_S_create(unsigned int, unsigned int, std::allocator<wchar_t> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x5DE768F: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_Rep::_M_clone(std::allocator<wchar_t> const&, unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x5DE77BD: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::reserve(unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x5DE7B0F: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::append(wchar_t const*, unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x5DE7C25: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::operator+=(wchar_t const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x4B979A7: wxString::operator+=(wchar_t const*) (string.h:3237) ==2610== by 0x4BADC68: wxlua_getLuaArgsMsg(lua_State*, int, int) (wxlbind.cpp:592) ==2610== by 0x4BB52D3: wxlua_argerrormsg(lua_State*, wxString const&) (wxllua.cpp:180) ==2610== by 0x4BB51B7: wxlua_argerror(lua_State*, int, wxString const&) (wxllua.cpp:174) ==2610== by 0x4BB7D3E: wxluaT_getuserdatatype(lua_State*, int, int) (wxllua.cpp:1093) ==2610== by 0x4AAF381: wxLua_wxTextCtrl_DiscardEdits(lua_State*) (wxcore_controls.cpp:8270) ==2610== ==2610== 151,000 bytes in 1,000 blocks are definitely lost in loss record 3,793 of 3,796 ==2610== at 0x402C619: malloc (vg_replace_malloc.c:299) ==2610== by 0x402C79F: realloc (vg_replace_malloc.c:785) ==2610== by 0x4E4EF97: Extend (string.h:3329) ==2610== by 0x4E4EF97: wxString::AsChar(wxMBConv const&) const (string.cpp:545) ==2610== by 0x4A61573: wxCStrData::AsChar() const (string.h:4038) ==2610== by 0x4A61542: wxCStrData::operator char const*() const (string.h:166) ==2610== by 0x4BB543B: wxlua_argerrormsg(lua_State*, wxString const&) (wxllua.cpp:202) ==2610== by 0x4BB51B7: wxlua_argerror(lua_State*, int, wxString const&) (wxllua.cpp:174) ==2610== by 0x4BB7D3E: wxluaT_getuserdatatype(lua_State*, int, int) (wxllua.cpp:1093) ==2610== by 0x4AAF381: wxLua_wxTextCtrl_DiscardEdits(lua_State*) (wxcore_controls.cpp:8270) ==2610== by 0x804F1CD: ??? (in /usr/bin/lua5.1) ==2610== by 0x805813A: ??? (in /usr/bin/lua5.1) ==2610== by 0x804F5B7: ??? (in /usr/bin/lua5.1) ==2610== ==2610== 203,796 bytes in 999 blocks are definitely lost in loss record 3,794 of 3,796 ==2610== at 0x402C10B: operator new(unsigned int) (vg_replace_malloc.c:327) ==2610== by 0x5DE6386: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_Rep::_S_create(unsigned int, unsigned int, std::allocator<wchar_t> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x5DE768F: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_Rep::_M_clone(std::allocator<wchar_t> const&, unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x5DE77BD: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::reserve(unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x5DE7D86: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::append(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x5DE7E12: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::operator+=(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x4B908C1: wxString::operator+=(wxString const&) (string.h:3222) ==2610== by 0x4BB5355: wxlua_argerrormsg(lua_State*, wxString const&) (wxllua.cpp:197) ==2610== by 0x4BB51B7: wxlua_argerror(lua_State*, int, wxString const&) (wxllua.cpp:174) ==2610== by 0x4BB7D3E: wxluaT_getuserdatatype(lua_State*, int, int) (wxllua.cpp:1093) ==2610== by 0x4AAF381: wxLua_wxTextCtrl_DiscardEdits(lua_State*) (wxcore_controls.cpp:8270) ==2610== by 0x804F1CD: ??? (in /usr/bin/lua5.1) ==2610== ==2610== 292,000 bytes in 1,000 blocks are definitely lost in loss record 3,795 of 3,796 ==2610== at 0x402C10B: operator new(unsigned int) (vg_replace_malloc.c:327) ==2610== by 0x5DE6386: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_Rep::_S_create(unsigned int, unsigned int, std::allocator<wchar_t> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x4E4F028: _S_construct<__gnu_cxx::__normal_iterator<const wchar_t*, std::basic_string<wchar_t> > > (basic_string.tcc:140) ==2610== by 0x4E4F028: _S_construct_aux<__gnu_cxx::__normal_iterator<const wchar_t*, std::basic_string<wchar_t> > > (basic_string.h:1692) ==2610== by 0x4E4F028: _S_construct<__gnu_cxx::__normal_iterator<const wchar_t*, std::basic_string<wchar_t> > > (basic_string.h:1713) ==2610== by 0x4E4F028: basic_string<__gnu_cxx::__normal_iterator<const wchar_t*, std::basic_string<wchar_t> > > (basic_string.tcc:231) ==2610== by 0x4E4F028: wxString (string.h:2271) ==2610== by 0x4E4F028: wxString::Shrink() (string.cpp:562) ==2610== by 0x4E516CA: DoStringPrintfV(wxString&, wxString const&, char*) (string.cpp:2119) ==2610== by 0x4E517FE: wxString::DoFormatWchar(wchar_t const*, ...) (string.cpp:1893) ==2610== by 0x4BA0259: wxString wxString::Format<wxCStrData, int, wxCStrData>(wxFormatString const&, wxCStrData, int, wxCStrData) (string.h:2188) ==2610== by 0x4BB516B: wxlua_argerror(lua_State*, int, wxString const&) (wxllua.cpp:172) ==2610== by 0x4BB7D3E: wxluaT_getuserdatatype(lua_State*, int, int) (wxllua.cpp:1093) ==2610== by 0x4AAF381: wxLua_wxTextCtrl_DiscardEdits(lua_State*) (wxcore_controls.cpp:8270) ==2610== by 0x804F1CD: ??? (in /usr/bin/lua5.1) ==2610== by 0x805813A: ??? (in /usr/bin/lua5.1) ==2610== by 0x804F5B7: ??? (in /usr/bin/lua5.1) ==2610== ==2610== 613,536 bytes in 996 blocks are definitely lost in loss record 3,796 of 3,796 ==2610== at 0x402C10B: operator new(unsigned int) (vg_replace_malloc.c:327) ==2610== by 0x5DE6386: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_Rep::_S_create(unsigned int, unsigned int, std::allocator<wchar_t> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2610== by 0x4E4F028: _S_construct<__gnu_cxx::__normal_iterator<const wchar_t*, std::basic_string<wchar_t> > > (basic_string.tcc:140) ==2610== by 0x4E4F028: _S_construct_aux<__gnu_cxx::__normal_iterator<const wchar_t*, std::basic_string<wchar_t> > > (basic_string.h:1692) ==2610== by 0x4E4F028: _S_construct<__gnu_cxx::__normal_iterator<const wchar_t*, std::basic_string<wchar_t> > > (basic_string.h:1713) ==2610== by 0x4E4F028: basic_string<__gnu_cxx::__normal_iterator<const wchar_t*, std::basic_string<wchar_t> > > (basic_string.tcc:231) ==2610== by 0x4E4F028: wxString (string.h:2271) ==2610== by 0x4E4F028: wxString::Shrink() (string.cpp:562) ==2610== by 0x4E516CA: DoStringPrintfV(wxString&, wxString const&, char*) (string.cpp:2119) ==2610== by 0x4E51739: wxString::DoPrintfWchar(wchar_t const*, ...) (string.cpp:1944) ==2610== by 0x4BBB1B6: int wxString::Printf<wxCStrData, wxCStrData, wxCStrData>(wxFormatString const&, wxCStrData, wxCStrData, wxCStrData) (string.h:2181) ==2610== by 0x4BB53EC: wxlua_argerrormsg(lua_State*, wxString const&) (wxllua.cpp:201) ==2610== by 0x4BB51B7: wxlua_argerror(lua_State*, int, wxString const&) (wxllua.cpp:174) ==2610== by 0x4BB7D3E: wxluaT_getuserdatatype(lua_State*, int, int) (wxllua.cpp:1093) ==2610== by 0x4AAF381: wxLua_wxTextCtrl_DiscardEdits(lua_State*) (wxcore_controls.cpp:8270) ==2610== by 0x804F1CD: ??? (in /usr/bin/lua5.1) ==2610== by 0x805813A: ??? (in /usr/bin/lua5.1) ==2610== ==2610== LEAK SUMMARY: ==2610== definitely lost: 1,628,352 bytes in 9,061 blocks ==2610== indirectly lost: 3,264 bytes in 75 blocks ==2610== possibly lost: 247,502 bytes in 2,140 blocks require "wx" local ctrl = wx.wxTextCtrl() for _ = 1, 1000 do pcall(function() return ctrl[{}] end) end ==2635== 36,000 bytes in 1,000 blocks are definitely lost in loss record 3,786 of 3,792 ==2635== at 0x402C10B: operator new(unsigned int) (vg_replace_malloc.c:327) ==2635== by 0x5DE6386: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_Rep::_S_create(unsigned int, unsigned int, std::allocator<wchar_t> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2635== by 0x5DE85BE: wchar_t* std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_S_construct<wchar_t const*>(wchar_t const*, wchar_t const*, std::allocator<wchar_t> const&, std::forward_iterator_tag) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2635== by 0x5DE8736: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(wchar_t const*, std::allocator<wchar_t> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2635== by 0x4B5F018: wxString::wxString(char const*, wxMBConv const&) (in /home/paul/zbs/bin/linux/x86/libwx.so) ==2635== by 0x4B605CA: lua2wx(char const*) (wxllua.h:41) ==2635== by 0x4BB7969: wxlua_luaL_typename(lua_State*, int) (wxllua.cpp:939) ==2635== by 0x4BABB39: wxlua_wxLuaBindClass__index(lua_State*) (wxlbind.cpp:143) ==2635== by 0x804F1CD: ??? (in /usr/bin/lua5.1) ==2635== by 0x804F567: ??? (in /usr/bin/lua5.1) ==2635== by 0x8056783: ??? (in /usr/bin/lua5.1) ==2635== by 0x8057A00: ??? (in /usr/bin/lua5.1) ==2635== ==2635== 56,000 bytes in 1,000 blocks are definitely lost in loss record 3,787 of 3,792 ==2635== at 0x402C10B: operator new(unsigned int) (vg_replace_malloc.c:327) ==2635== by 0x5DE6386: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_Rep::_S_create(unsigned int, unsigned int, std::allocator<wchar_t> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2635== by 0x5DE85BE: wchar_t* std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_S_construct<wchar_t const*>(wchar_t const*, wchar_t const*, std::allocator<wchar_t> const&, std::forward_iterator_tag) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2635== by 0x5DE8736: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(wchar_t const*, std::allocator<wchar_t> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2635== by 0x4B5F018: wxString::wxString(char const*, wxMBConv const&) (in /home/paul/zbs/bin/linux/x86/libwx.so) ==2635== by 0x4B605CA: lua2wx(char const*) (wxllua.h:41) ==2635== by 0x4BABAFE: wxlua_wxLuaBindClass__index(lua_State*) (wxlbind.cpp:143) ==2635== by 0x804F1CD: ??? (in /usr/bin/lua5.1) ==2635== by 0x804F567: ??? (in /usr/bin/lua5.1) ==2635== by 0x8056783: ??? (in /usr/bin/lua5.1) ==2635== by 0x8057A00: ??? (in /usr/bin/lua5.1) ==2635== by 0x804F5B7: ??? (in /usr/bin/lua5.1) ==2635== ==2635== 82,000 bytes in 1,000 blocks are definitely lost in loss record 3,788 of 3,792 ==2635== at 0x402C619: malloc (vg_replace_malloc.c:299) ==2635== by 0x402C79F: realloc (vg_replace_malloc.c:785) ==2635== by 0x4E4EF97: Extend (string.h:3329) ==2635== by 0x4E4EF97: wxString::AsChar(wxMBConv const&) const (string.cpp:545) ==2635== by 0x4A61573: wxCStrData::AsChar() const (string.h:4038) ==2635== by 0x4A61542: wxCStrData::operator char const*() const (string.h:166) ==2635== by 0x4BABBFF: wxlua_wxLuaBindClass__index(lua_State*) (wxlbind.cpp:143) ==2635== by 0x804F1CD: ??? (in /usr/bin/lua5.1) ==2635== by 0x804F567: ??? (in /usr/bin/lua5.1) ==2635== by 0x8056783: ??? (in /usr/bin/lua5.1) ==2635== by 0x8057A00: ??? (in /usr/bin/lua5.1) ==2635== by 0x804F5B7: ??? (in /usr/bin/lua5.1) ==2635== by 0x804BAFF: ??? (in /usr/bin/lua5.1) ==2635== ==2635== 296,000 bytes in 1,000 blocks are definitely lost in loss record 3,789 of 3,792 ==2635== at 0x402C10B: operator new(unsigned int) (vg_replace_malloc.c:327) ==2635== by 0x5DE6386: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_Rep::_S_create(unsigned int, unsigned int, std::allocator<wchar_t> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2635== by 0x5DE85BE: wchar_t* std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_S_construct<wchar_t const*>(wchar_t const*, wchar_t const*, std::allocator<wchar_t> const&, std::forward_iterator_tag) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2635== by 0x5DE8736: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(wchar_t const*, std::allocator<wchar_t> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2635== by 0x4A96C4C: wxString::wxString(char const*) (in /home/paul/zbs/bin/linux/x86/libwx.so) ==2635== by 0x4BABB7D: wxlua_wxLuaBindClass__index(lua_State*) (wxlbind.cpp:142) ==2635== by 0x804F1CD: ??? (in /usr/bin/lua5.1) ==2635== by 0x804F567: ??? (in /usr/bin/lua5.1) ==2635== by 0x8056783: ??? (in /usr/bin/lua5.1) ==2635== by 0x8057A00: ??? (in /usr/bin/lua5.1) ==2635== by 0x804F5B7: ??? (in /usr/bin/lua5.1) ==2635== by 0x804BAFF: ??? (in /usr/bin/lua5.1) ==2635== ==2635== 340,000 bytes in 1,000 blocks are definitely lost in loss record 3,790 of 3,792 ==2635== at 0x402C10B: operator new(unsigned int) (vg_replace_malloc.c:327) ==2635== by 0x5DE6386: std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_Rep::_S_create(unsigned int, unsigned int, std::allocator<wchar_t> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16) ==2635== by 0x4E4F028: _S_construct<__gnu_cxx::__normal_iterator<const wchar_t*, std::basic_string<wchar_t> > > (basic_string.tcc:140) ==2635== by 0x4E4F028: _S_construct_aux<__gnu_cxx::__normal_iterator<const wchar_t*, std::basic_string<wchar_t> > > (basic_string.h:1692) ==2635== by 0x4E4F028: _S_construct<__gnu_cxx::__normal_iterator<const wchar_t*, std::basic_string<wchar_t> > > (basic_string.h:1713) ==2635== by 0x4E4F028: basic_string<__gnu_cxx::__normal_iterator<const wchar_t*, std::basic_string<wchar_t> > > (basic_string.tcc:231) ==2635== by 0x4E4F028: wxString (string.h:2271) ==2635== by 0x4E4F028: wxString::Shrink() (string.cpp:562) ==2635== by 0x4E516CA: DoStringPrintfV(wxString&, wxString const&, char*) (string.cpp:2119) ==2635== by 0x4E517FE: wxString::DoFormatWchar(wchar_t const*, ...) (string.cpp:1893) ==2635== by 0x4B91292: wxString wxString::Format<wxCStrData, wxCStrData>(wxFormatString const&, wxCStrData, wxCStrData) (string.h:2188) ==2635== by 0x4BABBD3: wxlua_wxLuaBindClass__index(lua_State*) (wxlbind.cpp:143) ==2635== by 0x804F1CD: ??? (in /usr/bin/lua5.1) ==2635== by 0x804F567: ??? (in /usr/bin/lua5.1) ==2635== by 0x8056783: ??? (in /usr/bin/lua5.1) ==2635== by 0x8057A00: ??? (in /usr/bin/lua5.1) ==2635== by 0x804F5B7: ??? (in /usr/bin/lua5.1) ==2635== ==2635== 424,000 bytes in 1,000 blocks are indirectly lost in loss record 3,791 of 3,792 ==2635== at 0x402C619: malloc (vg_replace_malloc.c:299) ==2635== by 0x402C79F: realloc (vg_replace_malloc.c:785) ==2635== by 0x4E52C07: wxCharTypeBuffer<wchar_t>::extend(unsigned int) (buffer.h:324) ==2635== by 0x4E52CF4: wxFormatConverterBase<wchar_t>::CopyAllBefore() (strvararg.cpp:378) ==2635== by 0x4E52D4F: wxFormatConverterBase<wchar_t>::InsertFmtChar(wchar_t) (strvararg.cpp:349) ==2635== by 0x4E52F3C: wxFormatConverterBase<wchar_t>::Convert(wchar_t const*) (strvararg.cpp:270) ==2635== by 0x4E52291: wxFormatString::AsWChar() (strvararg.cpp:643) ==2635== by 0x4A3D4EE: wxFormatString::operator wchar_t const*() const (strvararg.h:220) ==2635== by 0x4B91279: wxString wxString::Format<wxCStrData, wxCStrData>(wxFormatString const&, wxCStrData, wxCStrData) (string.h:2188) ==2635== by 0x4BABBD3: wxlua_wxLuaBindClass__index(lua_State*) (wxlbind.cpp:143) ==2635== by 0x804F1CD: ??? (in /usr/bin/lua5.1) ==2635== by 0x804F567: ??? (in /usr/bin/lua5.1) ==2635== ==2635== 436,000 (12,000 direct, 424,000 indirect) bytes in 1,000 blocks are definitely lost in loss record 3,792 of 3,792 ==2635== at 0x402C10B: operator new(unsigned int) (vg_replace_malloc.c:327) ==2635== by 0x4E52C38: wxCharTypeBuffer<wchar_t>::extend(unsigned int) (buffer.h:334) ==2635== by 0x4E52CF4: wxFormatConverterBase<wchar_t>::CopyAllBefore() (strvararg.cpp:378) ==2635== by 0x4E52D4F: wxFormatConverterBase<wchar_t>::InsertFmtChar(wchar_t) (strvararg.cpp:349) ==2635== by 0x4E52F3C: wxFormatConverterBase<wchar_t>::Convert(wchar_t const*) (strvararg.cpp:270) ==2635== by 0x4E52291: wxFormatString::AsWChar() (strvararg.cpp:643) ==2635== by 0x4A3D4EE: wxFormatString::operator wchar_t const*() const (strvararg.h:220) ==2635== by 0x4B91279: wxString wxString::Format<wxCStrData, wxCStrData>(wxFormatString const&, wxCStrData, wxCStrData) (string.h:2188) ==2635== by 0x4BABBD3: wxlua_wxLuaBindClass__index(lua_State*) (wxlbind.cpp:143) ==2635== by 0x804F1CD: ??? (in /usr/bin/lua5.1) ==2635== by 0x804F567: ??? (in /usr/bin/lua5.1) ==2635== by 0x8056783: ??? (in /usr/bin/lua5.1) ==2635== ==2635== LEAK SUMMARY: ==2635== definitely lost: 826,140 bytes in 6,067 blocks ==2635== indirectly lost: 427,264 bytes in 1,075 blocks ==2635== possibly lost: 243,262 bytes in 2,080 blocks ------------------------------------------------------------------------------ _______________________________________________ wxlua-users mailing list wxlua-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wxlua-users