Perdite di memoria

di il
20 risposte

Perdite di memoria

Il mio software funziona ma quando chiudo la mia Dialog ho perdite di memoria, questo è il mio output:

Detected memory leaks!
Dumping objects ->
{1536559} normal block at 0x2153B718, 36 bytes long.
 Data: < @  PC   E  0H  > E0 40 DB 00 50 43 DB 00 C0 45 DB 00 30 48 DB 00 
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {1536544} normal block at 0x1DFE7650, 128 bytes long.
 Data: <                > 00 00 00 00 CD CD CD CD 00 00 00 00 00 00 00 00 
c:\dev2015\lib\elidraw\vectordraw.cpp(148) : {1536543} client block at 0x122C69B0, subtype c0, 8 bytes long.
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dumpcont.cpp(23) : atlTraceGeneral - a CBitmap object at $122C69B0, 8 bytes long
c:\dev2015\lib\elidraw\vectordraw.cpp(138) : {1536542} client block at 0x1AA518D0, subtype c0, 16 bytes long.
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dumpcont.cpp(23) : atlTraceGeneral - a CDC object at $1AA518D0, 16 bytes long
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {1536541} normal block at 0x1DFE70D0, 128 bytes long.
 Data: <                > 00 00 00 00 CD CD CD CD 00 00 00 00 00 00 00 00 
c:\dev2015\lib\elidraw\vectordraw.cpp(148) : {1536540} client block at 0x122C6898, subtype c0, 8 bytes long.
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dumpcont.cpp(23) : atlTraceGeneral - a CBitmap object at $122C6898, 8 bytes long
c:\dev2015\lib\elidraw\vectordraw.cpp(138) : {1536539} client block at 0x1AA51A90, subtype c0, 16 bytes long.
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dumpcont.cpp(23) : atlTraceGeneral - a CDC object at $1AA51A90, 16 bytes long
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {1536538} normal block at 0x1DFE7B20, 128 bytes long.
 Data: <                > 00 00 00 00 CD CD CD CD 00 00 00 00 00 00 00 00 
c:\dev2015\lib\elidraw\vectordraw.cpp(148) : {1536537} client block at 0x122C6EB8, subtype c0, 8 bytes long.
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dumpcont.cpp(23) : atlTraceGeneral - a CBitmap object at $122C6EB8, 8 bytes long
c:\dev2015\lib\elidraw\vectordraw.cpp(138) : {1536536} client block at 0x1AA51410, subtype c0, 16 bytes long.
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dumpcont.cpp(23) : atlTraceGeneral - a CDC object at $1AA51410, 16 bytes long
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {1536535} normal block at 0x1DFE77B0, 128 bytes long.
 Data: <                > 00 00 00 00 CD CD CD CD 00 00 00 00 00 00 00 00 
c:\dev2015\lib\elidraw\vectordraw.cpp(148) : {1536534} client block at 0x122C6C88, subtype c0, 8 bytes long.
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dumpcont.cpp(23) : atlTraceGeneral - a CBitmap object at $122C6C88, 8 bytes long
c:\dev2015\lib\elidraw\vectordraw.cpp(138) : {1536533} client block at 0x1AA51390, subtype c0, 16 bytes long.
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dumpcont.cpp(23) : atlTraceGeneral - a CDC object at $1AA51390, 16 bytes long
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {1536532} normal block at 0x1DFE7A70, 128 bytes long.
 Data: <                > 00 00 00 00 CD CD CD CD 00 00 00 00 00 00 00 00 
c:\dev2015\lib\elidraw\vectordraw.cpp(148) : {1536531} client block at 0x122C6CC0, subtype c0, 8 bytes long.
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dumpcont.cpp(23) : atlTraceGeneral - a CBitmap object at $122C6CC0, 8 bytes long
c:\dev2015\lib\elidraw\vectordraw.cpp(138) : {1536530} client block at 0x1AA51350, subtype c0, 16 bytes long.
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dumpcont.cpp(23) : atlTraceGeneral - a CDC object at $1AA51350, 16 bytes long
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {1536529} normal block at 0x1DFE74F0, 128 bytes long.
 Data: <                > 00 00 00 00 CD CD CD CD 00 00 00 00 00 00 00 00 
c:\dev2015\lib\elidraw\vectordraw.cpp(148) : {1536528} client block at 0x122C6BA8, subtype c0, 8 bytes long.
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dumpcont.cpp(23) : atlTraceGeneral - a CBitmap object at $122C6BA8, 8 bytes long
c:\dev2015\lib\elidraw\vectordraw.cpp(138) : {1536527} client block at 0x1AA51710, subtype c0, 16 bytes long.
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dumpcont.cpp(23) : atlTraceGeneral - a CDC object at $1AA51710, 16 bytes long
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {1536526} normal block at 0x1DFE69F0, 128 bytes long.
 Data: <                > 00 00 00 00 CD CD CD CD 00 00 00 00 00 00 00 00 

queste sono solo alcune righe perché ne ho molte altre, c'è un modo per capire quale sia la riga che causa cio? nel frattempo sto facendo la delete per tutti i miei puntatori

20 Risposte

  • Re: Perdite di memoria

    @vale88, si chiama “morbo di alzheimer” ;-)

    Un “memory leak” e' semplicemente un blocco di memoria “allocato MA NON deallocato”

    Devi conrollare “punto per punto” TUTTO il codice coinvolto. 
    In particolare devi controllare DOVE fai l'allocazione dell'oggetto e DOVE lo dellochi/rilasci. 

    OGNI oggetto allocato DEVE ESSERE deallocato!

    A quanto sembra sono de CBimap.

  • Re: Perdite di memoria

    Non solo CBitmap ma anche CDC

    P.S. per le perdite di memoria un integratore al fosforo… ;) … meglio scrivere “memory leak” e lasciar perdere le traduzioni

  • Re: Perdite di memoria

    23/10/2024 - oregon ha scritto:


    Non solo CBitmap ma anche CDC

    P.S. per le perdite di memoria un integratore al fosforo… ;) … meglio scrivere “memory leak” e lasciar perdere le traduzioni

    nel distruttore della mia classe ho scritto:

    CDlg1::~CDlg1()
    {
    	m_bitmapStart.DeleteObject();
    	m_bitmapStart1.DeleteObject();
    	m_bitmapStart2.DeleteObject();
    	m_bitmapStart3.DeleteObject();
    
    
    if (m_pImageList)
    		m_pImageList->DeleteImageList();
    }

    ma la situazione non pare migliorare

  • Re: Perdite di memoria

    No, non è questo che devi fare.

    Dipende da come sono state utilizzati gli oggetti CBitmap nel codice … bisogna vedere il programma non solo 4 linee

    Come sono dichiarati m_bitmapStart e gli altri membri?

  • Re: Perdite di memoria

    Nel .h ho:

    CImageList *m_pImageList;
    
    CBitmap m_bitmapStart;
    	CBitmap m_bitmapStart1;
    	CBitmap m_bitmapStart2;
    	CBitmap m_bitmapStart3;
    	CBitmap m_bitmapStart4;
    	CBitmap m_bitmapStart5;
    	CBitmap m_bitmapStart6;
    	CBitmap m_bitmapStart7;
    	CBitmap m_bitmapStart8;
    	CBitmap m_bitmapStart9;
    	CBitmap m_bitmapStart10;
    	CBitmap m_bitmapStart11;

    nel .cpp:

    MyListCtrl *pLst = &m_list1;
    	
        m_pImageList = new CImageList;
    	m_pImageList->Create(16, 16, ILC_COLOR8, 16, 16);
    	m_pImageList->SetBkColor(WColorWhite);
    
    	CBitmap	bm;
    	bm.LoadBitmap(IDB_BITMAP_STATO_BOLLE);
    	m_pImageList->Add(&bm, WColorBlack);
    
    
    	m_list1.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FLATSB | LVS_EX_FULLROWSELECT | LVS_EX_SUBITEMIMAGES | LVS_OWNERDRAWFIXED);
    
    	pLst->SetImageList(m_pImageList, LVSIL_SMALL);
    	
    	m_bitmapStart.LoadBitmap(IDB_NUOVA);
    	HBITMAP hBitmap = (HBITMAP)m_bitmapStart.GetSafeHandle();
    	m_button.SetBitmap(hBitmap);
  • Re: Perdite di memoria

    Innanzi tutto le variabili non devono stare nel .h

    Poi immagino che queste

    m_bitmapStart.LoadBitmap(IDB_NUOVA);
    HBITMAP hBitmap = (HBITMAP)m_bitmapStart.GetSafeHandle();
    m_button.SetBitmap(hBitmap);

    siano ripetute per tutte le altre bitmap, è così ?

    Perché non scrivi

    m_bitmapStart.LoadBitmap(IDB_NUOVA);
    m_button.SetBitmap(m_bitmapStart);
  • Re: Perdite di memoria

    29/10/2024 - oregon ha scritto:


    Innanzi tutto le variabili non devono stare nel .h

    Poi immagino che queste

    m_bitmapStart.LoadBitmap(IDB_NUOVA);
    HBITMAP hBitmap = (HBITMAP)m_bitmapStart.GetSafeHandle();
    m_button.SetBitmap(hBitmap);

    siano ripetute per tutte le altre bitmap, è così ?

    E cosa c'è dopo?

    sì esatto, sono ripetute per tutte, dopo c'è altro codice ma non ha a che vedere coi bitmap

  • Re: Perdite di memoria

    29/10/2024 - oregon ha scritto:


    m_bitmapStart.LoadBitmap(IDB_NUOVA);
    m_button.SetBitmap(m_bitmapStart);

    vero, adesso ho modificato il codice come hai detto tu

  • Re: Perdite di memoria

    Continua a funzionare? Ci sono ancora i memory leak dei CDC ?

  • Re: Perdite di memoria

    29/10/2024 - oregon ha scritto:


    Continua a funzionare? Ci sono ancora i memory leak dei CDC ?

    sì ci sono ancora, non è cambiato niente

  • Re: Perdite di memoria

    Nel distruttore per ogni bitmap scrivi

    m_bitmapStart.Detach();
  • Re: Perdite di memoria

    30/10/2024 - oregon ha scritto:


    Nel distruttore per ogni bitmap scrivi

    m_bitmapStart.Detach();

    Quindi m_bitmapStart lo inserisco nel .h?

  • Re: Perdite di memoria

    30/10/2024 - oregon ha scritto:


    .Detach();

    Ho provato ma non cambia la situazione

  • Re: Perdite di memoria

    Purtroppo così non se ne esce.

    È necessario, se vuoi indicazioni precise, provare il sorgente e fare direttamente debugging.

    Se puoi postare uno zip completo da eseguire ci proviamo, altrimenti mi spiace.

Devi accedere o registrarti per scrivere nel forum
20 risposte