Memory leaks in 3.0.1 and SVN revision 3524

Spoonfork

08-09-2010 22:32:15

Hey,

I was trying to set up the simplest MyGUI-application possible, with just a single button (using the quickstart guide on the wiki), and I'm getting a lot of memory leaks for some reason. I've tried using both the stable 3.0.1 source and the latest SVN revision (3524), but I get the same result with both. I even tried inserting the memory leak check in the Demo_Gui-project and I get the same result. I'm using the MSVC memory leak check _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF) and I'm getting like 600 memory leaks ranging from 8-32 bytes in size. I tried doing a _CrtSetBreakAlloc on the first memory leak (since I figured they originate from the same place) and this is the call stack I get:

msvcr100d.dll!_heap_alloc_dbg_impl(unsigned int nSize, int nBlockUse, const char * szFileName, int nLine, int * errno_tmp) Line 393

msvcr100d.dll!_nh_malloc_dbg_impl(unsigned int nSize, int nhFlag, int nBlockUse, const char * szFileName, int nLine, int * errno_tmp) Line 239 + 0x19 bytes

msvcr100d.dll!_nh_malloc_dbg(unsigned int nSize, int nhFlag, int nBlockUse, const char * szFileName, int nLine) Line 302 + 0x1d bytes

msvcr100d.dll!malloc(unsigned int nSize) Line 56 + 0x15 bytes

msvcr100d.dll!operator new(unsigned int size) Line 59 + 0x9 bytes

MyGUIEngine_d.dll!MyGUI::GenericFactory<MyGUI::SubSkinStateInfo>::createFromFactory(MyGUI::IObject * & _instance) Line 29 + 0x7 bytes

MyGUIEngine_d.dll!MyGUI::delegates::CStaticDelegate1<MyGUI::IObject * &>::invoke(MyGUI::IObject * & p1) Line 70 + 0xe bytes

MyGUIEngine_d.dll!MyGUI::delegates::CDelegate1<MyGUI::IObject * &>::operator()(MyGUI::IObject * & p1) Line 212 + 0x17 bytes

MyGUIEngine_d.dll!MyGUI::FactoryManager::createObject(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _category, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _type) Line 105

MyGUIEngine_d.dll!MyGUI::ResourceSkin::deserialization(MyGUI::xml::Element * _node, MyGUI::Version _version) Line 166 + 0x2e bytes

MyGUIEngine_d.dll!MyGUI::ResourceManager::loadFromXmlNode(MyGUI::xml::Element * _node, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _file, MyGUI::Version _version) Line 108 + 0x22 bytes

MyGUIEngine_d.dll!MyGUI::delegates::CMethodDelegate3<MyGUI::ResourceManager,MyGUI::xml::Element *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,MyGUI::Version>::invoke(MyGUI::xml::Element * p1, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & p2, MyGUI::Version p3) Line 105 + 0x22 bytes

MyGUIEngine_d.dll!MyGUI::delegates::CDelegate3<MyGUI::xml::Element *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,MyGUI::Version>::operator()(MyGUI::xml::Element * p1, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & p2, MyGUI::Version p3) Line 212 + 0x1f bytes

MyGUIEngine_d.dll!MyGUI::ResourceManager::_loadImplement(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _file, bool _match, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _type, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _instance) Line 172

MyGUIEngine_d.dll!MyGUI::ResourceManager::_loadList(MyGUI::xml::Element * _node, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _file, MyGUI::Version _version) Line 124 + 0x45 bytes

MyGUIEngine_d.dll!MyGUI::delegates::CMethodDelegate3<MyGUI::ResourceManager,MyGUI::xml::Element *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,MyGUI::Version>::invoke(MyGUI::xml::Element * p1, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & p2, MyGUI::Version p3) Line 105 + 0x22 bytes

MyGUIEngine_d.dll!MyGUI::delegates::CDelegate3<MyGUI::xml::Element *,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,MyGUI::Version>::operator()(MyGUI::xml::Element * p1, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & p2, MyGUI::Version p3) Line 212 + 0x1f bytes

MyGUIEngine_d.dll!MyGUI::ResourceManager::_loadImplement(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _file, bool _match, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _type, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _instance) Line 172

MyGUIEngine_d.dll!MyGUI::ResourceManager::load(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _file) Line 79 + 0x3c bytes

MyGUIEngine_d.dll!MyGUI::Gui::initialise(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _core, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & _logFileName) Line 123

Demo_Gui.exe!base::BaseManager::createGui() Line 222 + 0x36 bytes

Demo_Gui.exe!base::BaseManager::create() Line 151

Demo_Gui.exe!startApp<demo::DemoKeeper>() Line 31 + 0x8 bytes

Demo_Gui.exe!WinMain(HINSTANCE__ * hInst, HINSTANCE__ * __formal, char * strCmdLine, int argc) Line 187 + 0x8 bytes


And this call stack is from the Demo_Gui project, not my own application.

It should be noted that I don't get these memory leaks at all if I just blank the first parameter in MyGUI::Gui::initialise() (which is "core.xml" by default).

And here's the log I get when I run the Demo_Gui-example:

23:27:35 | Core | Info | * Initialise: RenderManager | src\MyGUI_OgreRenderManager.cpp | 35
23:27:35 | Core | Info | RenderManager successfully initialized | src\MyGUI_OgreRenderManager.cpp | 63
23:27:35 | Core | Info | * Initialise: DataManager | src\MyGUI_OgreDataManager.cpp | 26
23:27:35 | Core | Info | DataManager successfully initialized | src\MyGUI_OgreDataManager.cpp | 30
23:27:35 | Core | Info | * Initialise: Gui | src\MyGUI_Gui.cpp | 75
23:27:35 | Core | Info | * MyGUI version 3.2.0 | src\MyGUI_Gui.cpp | 80
23:27:35 | Core | Info | * Initialise: ResourceManager | src\MyGUI_ResourceManager.cpp | 48
23:27:35 | Core | Info | ResourceManager successfully initialized | src\MyGUI_ResourceManager.cpp | 56
23:27:35 | Core | Info | * Initialise: LayerManager | src\MyGUI_LayerManager.cpp | 49
23:27:35 | Core | Info | LayerManager successfully initialized | src\MyGUI_LayerManager.cpp | 57
23:27:35 | Core | Info | * Initialise: WidgetManager | src\MyGUI_WidgetManager.cpp | 68
23:27:35 | Core | Info | WidgetManager successfully initialized | src\MyGUI_WidgetManager.cpp | 100
23:27:35 | Core | Info | * Initialise: InputManager | src\MyGUI_InputManager.cpp | 57
23:27:35 | Core | Info | InputManager successfully initialized | src\MyGUI_InputManager.cpp | 74
23:27:35 | Core | Info | * Initialise: SubWidgetManager | src\MyGUI_SubWidgetManager.cpp | 50
23:27:35 | Core | Info | SubWidgetManager successfully initialized | src\MyGUI_SubWidgetManager.cpp | 72
23:27:35 | Core | Info | * Initialise: SkinManager | src\MyGUI_SkinManager.cpp | 51
23:27:35 | Core | Info | SkinManager successfully initialized | src\MyGUI_SkinManager.cpp | 59
23:27:35 | Core | Info | * Initialise: FontManager | src\MyGUI_FontManager.cpp | 48
23:27:35 | Core | Info | FontManager successfully initialized | src\MyGUI_FontManager.cpp | 57
23:27:35 | Core | Info | * Initialise: ControllerManager | src\MyGUI_ControllerManager.cpp | 46
23:27:35 | Core | Info | ControllerManager successfully initialized | src\MyGUI_ControllerManager.cpp | 56
23:27:35 | Core | Info | * Initialise: PointerManager | src\MyGUI_PointerManager.cpp | 60
23:27:35 | Core | Info | PointerManager successfully initialized | src\MyGUI_PointerManager.cpp | 78
23:27:35 | Core | Info | * Initialise: ClipboardManager | src\MyGUI_ClipboardManager.cpp | 87
23:27:35 | Core | Info | ClipboardManager successfully initialized | src\MyGUI_ClipboardManager.cpp | 101
23:27:35 | Core | Info | * Initialise: LayoutManager | src\MyGUI_LayoutManager.cpp | 45
23:27:35 | Core | Info | LayoutManager successfully initialized | src\MyGUI_LayoutManager.cpp | 50
23:27:35 | Core | Info | * Initialise: DynLibManager | src\MyGUI_DynLibManager.cpp | 41
23:27:35 | Core | Info | DynLibManager successfully initialized | src\MyGUI_DynLibManager.cpp | 45
23:27:35 | Core | Info | * Initialise: PluginManager | src\MyGUI_PluginManager.cpp | 45
23:27:35 | Core | Info | PluginManager successfully initialized | src\MyGUI_PluginManager.cpp | 49
23:27:35 | Core | Info | * Initialise: LanguageManager | src\MyGUI_LanguageManager.cpp | 45
23:27:35 | Core | Info | LanguageManager successfully initialized | src\MyGUI_LanguageManager.cpp | 49
23:27:35 | Core | Info | * Initialise: FactoryManager | src\MyGUI_FactoryManager.cpp | 39
23:27:35 | Core | Info | FactoryManager successfully initialized | src\MyGUI_FactoryManager.cpp | 41
23:27:35 | Core | Info | * Initialise: ToolTipManager | src\MyGUI_ToolTipManager.cpp | 47
23:27:35 | Core | Info | ToolTipManager successfully initialized | src\MyGUI_ToolTipManager.cpp | 58
23:27:35 | Core | Info | Load ini file 'core_theme.xml' | src\MyGUI_ResourceManager.cpp | 123
23:27:35 | Core | Info | Load ini file 'core_language.xml' | src\MyGUI_ResourceManager.cpp | 123
23:27:35 | Core | Info | Load ini file 'core_font.xml' | src\MyGUI_ResourceManager.cpp | 123
23:27:35 | Core | Info | ResourceTrueTypeFont 'font_DejaVuSans.17' using texture size 512 x 256 | src\MyGUI_ResourceTrueTypeFont.cpp | 206
23:27:35 | Core | Info | ResourceTrueTypeFont 'font_DejaVuSans.17' using real height 17 pixels | src\MyGUI_ResourceTrueTypeFont.cpp | 207
23:27:35 | Core | Info | ResourceTrueTypeFont 'font_DejaVuSans.14' using texture size 256 x 256 | src\MyGUI_ResourceTrueTypeFont.cpp | 206
23:27:35 | Core | Info | ResourceTrueTypeFont 'font_DejaVuSans.14' using real height 14 pixels | src\MyGUI_ResourceTrueTypeFont.cpp | 207
23:27:35 | Core | Info | Load ini file 'core_resource.xml' | src\MyGUI_ResourceManager.cpp | 123
23:27:35 | Core | Info | Load ini file 'core_skin.xml' | src\MyGUI_ResourceManager.cpp | 123
23:27:36 | Core | Info | Register value : 'HCenter' = 0 | c:\sdks\mygui\myguiengine\include\MyGUI_Align.h | 217
23:27:36 | Core | Info | Register value : 'VCenter' = 0 | c:\sdks\mygui\myguiengine\include\MyGUI_Align.h | 218
23:27:36 | Core | Info | Register value : 'Center' = 0 | c:\sdks\mygui\myguiengine\include\MyGUI_Align.h | 219
23:27:36 | Core | Info | Register value : 'Left' = 2 | c:\sdks\mygui\myguiengine\include\MyGUI_Align.h | 220
23:27:36 | Core | Info | Register value : 'Right' = 4 | c:\sdks\mygui\myguiengine\include\MyGUI_Align.h | 221
23:27:36 | Core | Info | Register value : 'HStretch' = 6 | c:\sdks\mygui\myguiengine\include\MyGUI_Align.h | 222
23:27:36 | Core | Info | Register value : 'Top' = 8 | c:\sdks\mygui\myguiengine\include\MyGUI_Align.h | 223
23:27:36 | Core | Info | Register value : 'Bottom' = 16 | c:\sdks\mygui\myguiengine\include\MyGUI_Align.h | 224
23:27:36 | Core | Info | Register value : 'VStretch' = 24 | c:\sdks\mygui\myguiengine\include\MyGUI_Align.h | 225
23:27:36 | Core | Info | Register value : 'Stretch' = 30 | c:\sdks\mygui\myguiengine\include\MyGUI_Align.h | 226
23:27:36 | Core | Info | Register value : 'Default' = 10 | c:\sdks\mygui\myguiengine\include\MyGUI_Align.h | 227
23:27:36 | Core | Info | Load ini file 'core_pointer.xml' | src\MyGUI_ResourceManager.cpp | 123
23:27:36 | Core | Info | Load ini file 'core_layer.xml' | src\MyGUI_ResourceManager.cpp | 123
23:27:36 | Core | Info | Load ini file 'core_settings.xml' | src\MyGUI_ResourceManager.cpp | 123
23:27:36 | Core | Info | Gui successfully initialized | src\MyGUI_Gui.cpp | 128
23:27:37 | Core | Warning | HeightList is deprecated, use MaxListLength [MainPanel.layout] | src\MyGUI_BackwardCompatibility.cpp | 846
23:27:39 | Core | Info | * Shutdown: Gui | src\MyGUI_Gui.cpp | 135
23:27:39 | Core | Info | * Shutdown: PointerManager | src\MyGUI_PointerManager.cpp | 85
23:27:39 | Core | Info | PointerManager successfully shutdown | src\MyGUI_PointerManager.cpp | 101
23:27:39 | Core | Info | * Shutdown: InputManager | src\MyGUI_InputManager.cpp | 81
23:27:39 | Core | Info | InputManager successfully shutdown | src\MyGUI_InputManager.cpp | 86
23:27:39 | Core | Info | * Shutdown: SkinManager | src\MyGUI_SkinManager.cpp | 66
23:27:39 | Core | Info | SkinManager successfully shutdown | src\MyGUI_SkinManager.cpp | 71
23:27:39 | Core | Info | * Shutdown: SubWidgetManager | src\MyGUI_SubWidgetManager.cpp | 79
23:27:39 | Core | Info | SubWidgetManager successfully shutdown | src\MyGUI_SubWidgetManager.cpp | 101
23:27:39 | Core | Info | * Shutdown: LayerManager | src\MyGUI_LayerManager.cpp | 64
23:27:39 | Core | Info | destroy layer 'Wallpaper' | src\MyGUI_LayerManager.cpp | 207
23:27:39 | Core | Info | destroy layer 'Back' | src\MyGUI_LayerManager.cpp | 207
23:27:39 | Core | Info | destroy layer 'Overlapped' | src\MyGUI_LayerManager.cpp | 207
23:27:39 | Core | Info | destroy layer 'Middle' | src\MyGUI_LayerManager.cpp | 207
23:27:39 | Core | Info | destroy layer 'Modal' | src\MyGUI_LayerManager.cpp | 207
23:27:39 | Core | Info | destroy layer 'Main' | src\MyGUI_LayerManager.cpp | 207
23:27:39 | Core | Info | destroy layer 'Popup' | src\MyGUI_LayerManager.cpp | 207
23:27:39 | Core | Info | destroy layer 'FadeMiddle' | src\MyGUI_LayerManager.cpp | 207
23:27:39 | Core | Info | destroy layer 'Info' | src\MyGUI_LayerManager.cpp | 207
23:27:39 | Core | Info | destroy layer 'ToolTip' | src\MyGUI_LayerManager.cpp | 207
23:27:39 | Core | Info | destroy layer 'DragAndDrop' | src\MyGUI_LayerManager.cpp | 207
23:27:39 | Core | Info | destroy layer 'FadeBusy' | src\MyGUI_LayerManager.cpp | 207
23:27:39 | Core | Info | destroy layer 'Pointer' | src\MyGUI_LayerManager.cpp | 207
23:27:39 | Core | Info | destroy layer 'Fade' | src\MyGUI_LayerManager.cpp | 207
23:27:39 | Core | Info | destroy layer 'Statistic' | src\MyGUI_LayerManager.cpp | 207
23:27:39 | Core | Info | LayerManager successfully shutdown | src\MyGUI_LayerManager.cpp | 75
23:27:39 | Core | Info | * Shutdown: FontManager | src\MyGUI_FontManager.cpp | 64
23:27:39 | Core | Info | FontManager successfully shutdown | src\MyGUI_FontManager.cpp | 71
23:27:39 | Core | Info | * Shutdown: ControllerManager | src\MyGUI_ControllerManager.cpp | 63
23:27:39 | Core | Info | ControllerManager successfully shutdown | src\MyGUI_ControllerManager.cpp | 74
23:27:39 | Core | Info | * Shutdown: ClipboardManager | src\MyGUI_ClipboardManager.cpp | 108
23:27:39 | Core | Info | ClipboardManager successfully shutdown | src\MyGUI_ClipboardManager.cpp | 110
23:27:39 | Core | Info | * Shutdown: LayoutManager | src\MyGUI_LayoutManager.cpp | 57
23:27:39 | Core | Info | LayoutManager successfully shutdown | src\MyGUI_LayoutManager.cpp | 62
23:27:39 | Core | Info | * Shutdown: PluginManager | src\MyGUI_PluginManager.cpp | 56
23:27:39 | Core | Info | PluginManager successfully shutdown | src\MyGUI_PluginManager.cpp | 61
23:27:39 | Core | Info | * Shutdown: DynLibManager | src\MyGUI_DynLibManager.cpp | 52
23:27:39 | Core | Info | DynLibManager successfully shutdown | src\MyGUI_DynLibManager.cpp | 59
23:27:39 | Core | Info | * Shutdown: LanguageManager | src\MyGUI_LanguageManager.cpp | 56
23:27:39 | Core | Info | LanguageManager successfully shutdown | src\MyGUI_LanguageManager.cpp | 60
23:27:39 | Core | Info | * Shutdown: ResourceManager | src\MyGUI_ResourceManager.cpp | 63
23:27:39 | Core | Info | ResourceManager successfully shutdown | src\MyGUI_ResourceManager.cpp | 73
23:27:39 | Core | Info | * Shutdown: FactoryManager | src\MyGUI_FactoryManager.cpp | 48
23:27:39 | Core | Info | FactoryManager successfully shutdown | src\MyGUI_FactoryManager.cpp | 50
23:27:39 | Core | Info | * Shutdown: ToolTipManager | src\MyGUI_ToolTipManager.cpp | 65
23:27:39 | Core | Info | ToolTipManager successfully shutdown | src\MyGUI_ToolTipManager.cpp | 69
23:27:39 | Core | Info | * Shutdown: WidgetManager | src\MyGUI_WidgetManager.cpp | 107
23:27:39 | Core | Info | WidgetManager successfully shutdown | src\MyGUI_WidgetManager.cpp | 116
23:27:39 | Core | Info | Gui successfully shutdown | src\MyGUI_Gui.cpp | 178
23:27:39 | Core | Info | * Shutdown: RenderManager | src\MyGUI_OgreRenderManager.cpp | 70
23:27:39 | Core | Info | RenderManager successfully shutdown | src\MyGUI_OgreRenderManager.cpp | 78
23:27:39 | Core | Info | * Shutdown: DataManager | src\MyGUI_OgreDataManager.cpp | 37
23:27:39 | Core | Info | DataManager successfully shutdown | src\MyGUI_OgreDataManager.cpp | 39


Some technical info:

OS: Windows 7 Professional x64
IDE/Compiler: Visual Studio 2010
Ogre version: Mercurial source (v1-7 branch, commit 2311)
MyGUI dependencies: 2010-01-09

If there's any more info you need, don't hesitate to ask.

Altren

09-09-2010 10:46:47

That sounds not good. Looks like we wasn't making memory leak checks for a while.
We are fixing all leaks right now. Thank you for this report, I'm surprised that nobody noticed that for so long.

my.name

09-09-2010 14:44:52

update to revision 3531

Spoonfork

09-09-2010 23:23:51

update to revision 3531
It's working great now. Thanks for an awesome library!

my.name

10-09-2010 09:02:17

=)