Memory Leaks



  • Hi,

    ich bekomme Memory Leaks an folgender Stelle angezeigt:

    // m_lstBatterie vom Typ CMap<CString, LPCSTR, CBatterie*, CBatterie*>
    m_lstBatterie.SetAt(sBattName, new CBatterie(sSachNr, fKapazi, fStromkurve, fStromkurve2));

    Ich weiss, nach bei new soll man delete machen, aber das geht hier ja schlecht. Wie kann ich das Leak beseitigen?



  • CBatterie* pX = new CBatterie(sSachNr, fKapazi, fStromkurve, fStromkurve2); 
    m_lstBatterie.SetAt(sBattName, pX); 
    delete pX;
    


  • Entweder du verwendest shared_ptr in der map drinnen und keine raw pointers oder du musst am Ende händisch die ganze Map durchgehen und alle Pointer freigeben.



  • Ringding schrieb:

    oder du musst am Ende händisch die ganze Map durchgehen und alle Pointer freigeben.

    So hab ichs jetzt gemacht, das funzt einwandfrei.

    Nur leider bleiben noch ein paar Memory Leaks wegen meinem Dynamischen Menü
    Und zwar benutze ich folgende Funktionen zum erstellen des Menüs:

    // @func    appends item to menu
    void AddSubMenuItem(CMenu *pMenu, UINT cmdID, const char *string)
    {
      pMenu->AppendMenu(MF_STRING | MF_ENABLED, cmdID, string);
    }
    
    // @func    adds submenu to menu
    CMenu *AddSubMenu(CFrameWnd *pWnd, UINT mainMenuItem, UINT itemIndex,
    				  const char *string)
    {
      CMenu *pMenuBar = pWnd->GetMenu();
      CMenu *pSubMenu = pMenuBar->GetSubMenu(mainMenuItem);
      CMenu *pMenu = new CMenu;
      pMenu->CreatePopupMenu();
      pSubMenu->InsertMenu(itemIndex, MF_BYPOSITION | MF_POPUP,
    			(UINT)pMenu->m_hMenu, string);
    
      return pMenu;
    }
    

    in der CMainFrame dann folgendes :

    m_pMenu = AddSubMenu(this, 2, GetMenu()->GetSubMenu(2)->GetMenuItemCount()-1, sZeile);
    AddSubMenuItem(m_pMenu, iMenuCount, sZeile);
    

    Im Destruktur einfach nur delete m_pMenu geht natürlich nicht, da ich nicht nur 1 Submenü erstelle. Wie kann ich die Zeiger alle löschen?

    Edit:
    habs, hab einfach ne CList mit den Adressen gefüllt und die dann in Destruktor alle deleted. Nun hab ich auch keine Memory Leaks mehr.


Anmelden zum Antworten