Memory leak



  • Hallo zusammen,
    ich habe mir eben gerade probehalber den Visual Leak Detector von der CodeProject-Seite runtergeladen. Im Gegensatz zur Windows-Anzeige (VS2005) liefert mir der VLD beim Programmbeenden 2 memory leaks und zwar immer wenn ich ein ActiveX in meine dialogbasierte Anwendung einbinde, und zwar auch schon, wenn ich im neuen Projekt nichts anderes mache als das ActiveX einzubinden.

    Mit _CrtSetBreakAlloc hab ich dann die Stelle ermittelt, an der das Ganze passiert:

    INT_PTR nResponse = dlg.DoModal(); //Anwendungs-Assistenten generiert

    und zwar genauer gesagt in CreateDialogIndirect, welche in der dlgcore.cpp aufgerufen wird. Ich hoffe, irgendjemnd kann mir helfen, das Problem zu lösen oder ermutigt mich, es zu ignorieren 🙂 , Danke im voraus

    Gruss CatDog

    Ach ja, den Text aus dem Ausgabe-Fenster:

    WARNING: Visual Leak Detector detected memory leaks!
    ---------- Block 96 at 0x003531F8: 124 bytes ----------
    Call Stack:
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp (29): CPlex::Create
    f:\rtm\vctools\vc7libs\ship\atlmfc\include\afxtempl.h (914): CList<HWND__ *,HWND__ *>::NewNode
    f:\rtm\vctools\vc7libs\ship\atlmfc\include\afxtempl.h (961): CList<IControlSiteFactory *,IControlSiteFactory *>::AddHead
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp (839): CControlSiteFactoryMgr::RegisterSiteFactory
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp (791): CControlSiteFactoryMgr::CControlSiteFactoryMgr
    f:\rtm\vctools\vc7libs\ship\atlmfc\include\afxtls_.h (227): CProcessLocal<CControlSiteFactoryMgr>::CreateObject
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\afxtls.cpp (461): CProcessLocalObject::GetData
    f:\rtm\vctools\vc7libs\ship\atlmfc\include\afxtls_.h (213): CProcessLocal<CControlSiteFactoryMgr>::GetData
    f:\rtm\vctools\vc7libs\ship\atlmfc\include\afxtls_.h (222): CProcessLocal<CControlSiteFactoryMgr>::operator->
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp (168): COccManager::CreateSite
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\occcont.cpp (313): COleControlContainer::CreateControlCommon
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\occcont.cpp (366): COleControlContainer::CreateControl
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\occcont.cpp (286): COleControlContainer::CreateControl
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp (718): COccManager::CreateDlgControl
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp (490): COccManager::CreateDlgControls
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp (399): COccManager::CreateDlgControls
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\dlgcore.cpp (621): CDialog::HandleInitDialog
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp (2004): CWnd::OnWndMsg
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp (1741): CWnd::WindowProc
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp (240): AfxCallWndProc
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp (389): AfxWndProc
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\afxstate.cpp (407): AfxWndProcBase
    0x7E368734 (File and line number not available): GetDC
    0x7E368816 (File and line number not available): GetDC
    0x7E36B89B (File and line number not available): GetParent
    0x7E3743E0 (File and line number not available): GetWindowTextLengthW
    0x7E374704 (File and line number not available): CreateDialogIndirectParamAorW
    0x7E389B0B (File and line number not available): CreateDialogIndirectParamA
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\dlgcore.cpp (307): CWnd::CreateDlgIndirect
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\dlgcore.cpp (536): CDialog::DoModal
    d:\uebung\leaktest\leaktest\leaktest\leaktest.cpp (66): CLeakTestApp::InitInstance
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\winmain.cpp (37): AfxWinMain
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\appmodul.cpp (29): WinMain
    f:\rtm\vctools\crt_bld\self_x86\crt\src\crtexe.c (578): __tmainCRTStartup
    f:\rtm\vctools\crt_bld\self_x86\crt\src\crtexe.c (403): WinMainCRTStartup
    0x7C816FD7 (File and line number not available): RegisterWaitForInputIdle
    Data:
    00 00 00 00 00 00 00 00 00 00 00 00 F8 30 35 00 ........ .....05.
    14 32 35 00 CD CD CD CD CD CD CD CD 20 32 35 00 .25..... .....25.
    CD CD CD CD CD CD CD CD 2C 32 35 00 CD CD CD CD ........ ,25.....
    CD CD CD CD 38 32 35 00 CD CD CD CD CD CD CD CD ....825. ........
    44 32 35 00 CD CD CD CD CD CD CD CD 50 32 35 00 D25..... ....P25.
    CD CD CD CD CD CD CD CD 5C 32 35 00 CD CD CD CD ........ \25.....
    CD CD CD CD 68 32 35 00 CD CD CD CD CD CD CD CD ....h25. ........
    00 00 00 00 CD CD CD CD CD CD CD CD ........ ........

    ---------- Block 94 at 0x003530F8: 4 bytes ----------
    Call Stack:
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp (788): CControlSiteFactoryMgr::CControlSiteFactoryMgr
    f:\rtm\vctools\vc7libs\ship\atlmfc\include\afxtls_.h (227): CProcessLocal<CControlSiteFactoryMgr>::CreateObject
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\afxtls.cpp (461): CProcessLocalObject::GetData
    f:\rtm\vctools\vc7libs\ship\atlmfc\include\afxtls_.h (213): CProcessLocal<CControlSiteFactoryMgr>::GetData
    f:\rtm\vctools\vc7libs\ship\atlmfc\include\afxtls_.h (222): CProcessLocal<CControlSiteFactoryMgr>::operator->
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp (168): COccManager::CreateSite
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\occcont.cpp (313): COleControlContainer::CreateControlCommon
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\occcont.cpp (366): COleControlContainer::CreateControl
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\occcont.cpp (286): COleControlContainer::CreateControl
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp (718): COccManager::CreateDlgControl
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp (490): COccManager::CreateDlgControls
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp (399): COccManager::CreateDlgControls
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\dlgcore.cpp (621): CDialog::HandleInitDialog
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp (2004): CWnd::OnWndMsg
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp (1741): CWnd::WindowProc
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp (240): AfxCallWndProc
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\wincore.cpp (389): AfxWndProc
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\afxstate.cpp (407): AfxWndProcBase
    0x7E368734 (File and line number not available): GetDC
    0x7E368816 (File and line number not available): GetDC
    0x7E36B89B (File and line number not available): GetParent
    0x7E3743E0 (File and line number not available): GetWindowTextLengthW
    0x7E374704 (File and line number not available): CreateDialogIndirectParamAorW
    0x7E389B0B (File and line number not available): CreateDialogIndirectParamA
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\dlgcore.cpp (307): CWnd::CreateDlgIndirect
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\dlgcore.cpp (536): CDialog::DoModal
    d:\uebung\leaktest\leaktest\leaktest\leaktest.cpp (66): CLeakTestApp::InitInstance
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\winmain.cpp (37): AfxWinMain
    f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\appmodul.cpp (29): WinMain
    f:\rtm\vctools\crt_bld\self_x86\crt\src\crtexe.c (578): __tmainCRTStartup
    f:\rtm\vctools\crt_bld\self_x86\crt\src\crtexe.c (403): WinMainCRTStartup
    0x7C816FD7 (File and line number not available): RegisterWaitForInputIdle
    Data:
    DC 3A 1F 78 .:.x.... ........

    Visual Leak Detector detected 2 memory leaks.
    "LeakTest.exe": "C:\WINDOWS\system32\dbghelp.dll" entladen.
    Visual Leak Detector is now exiting.
    Das Programm "[3472] LeakTest.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.



  • Wenn es ein Memory-Leak-Problem in der dlgcore.cpp ist, würde ich es auf einen Irrtum seitens des Visual Leak Detectors schieben. Ist unwarscheinlich, dass dort ein Speicherleck existiert, denn somit müssten auch andere Programme anschlagen.

    Der Memory Validator beharrt z.B. wehemend auf ein Speicherleck in der STL Implementation wenn man die Klasse std::basic_fstream<..> nutzt. Andere Tools schlagen hier nicht an.



  • Ich glaube inzwischen, dass es wirklich ein Fehler des VLD ist, da diese "memory leaks" beim Einbinden jedes ActiveX Controls erscheinen

    Trotzdem Danke für die Mühe

    Gruss CatDog


Anmelden zum Antworten