Distruggere un puntatore

di il
5 risposte

Distruggere un puntatore

Ho creato una dialog con delle CEdit, e queste CEdit le inserisco in un vettore CEdit*[8];

nel costruttore ho scritto:


CDlgDistPz::CDlgDistPz(CWnd* pParent /*=NULL*/)
	: CDialogEx(IDD_DIALOGDISTPZ, pParent)
{
	for (int nI = 0; nI < 8; nI++)
		m_vEdit[nI] = NULL;

}
BOOL CDlgDistPz::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	

	for (int i = 0; i < 8; i++)
		m_vEdit[i] = new CEditDer;
	
	
	m_vEditVal[0] = &m_ed1;
	m_vEditVal[1] = &m_Ed2;
	m_vEditVal[2] = &m_Ed3;
	m_vEditVal[3] = &m_Ed4;
	m_vEditVal[4] = &m_Ed5;
	m_vEditVal[5] = &m_Ed6;
	m_vEditVal[6] = &m_Ed7;
	m_vEditValT[7] = &m_Ed8;


	


	return TRUE;
}

nel distruttore:


CDlgDistPz::~CDlgDistPz()
{
	for (int nI = 0; nI < 8; nI++)
	{
		if (m_vEdi[nI])
			delete m_vEdit[nI];//----> punto dove crasha
	}

}

Il problema è che quando chiudo la dialog il software crasha..

5 Risposte

  • Re: Distruggere un puntatore

    Ma è ovvio che hai problemi

    Questo codice

    	m_vEditValTaglie[0] = &m_ed1;
    	m_vEditValTaglie[1] = &m_Ed2;
    	m_vEditValTaglie[2] = &m_Ed3;
    	m_vEditValTaglie[3] = &m_Ed4;
    	m_vEditValTaglie[4] = &m_Ed5;
    	m_vEditValTaglie[5] = &m_Ed6;
    	m_vEditValTaglie[6] = &m_Ed7;
    	m_vEditValTaglie[7] = &m_Ed8

    assegna dei puntatori a controlli esistenti e perde tutti i riferimenti ai puntatori creati dinamicamente. Poi tenti di liberare la memoria con la delete non con i puntatori allocati ma con quelli dei controlli che nulla hanno a che vedere,

    Se i controlli esistono e stai copiando i puntatori in un vettore, le new/delete NON servono proprio a nulla.

  • Re: Distruggere un puntatore

    29/10/2024 - oregon ha scritto:


    Se i controlli esistono e stai copiando i puntatori in un vettore, le new/delete NON servono proprio a nulla.

    Quindi in questo caso la delete non serve?

  • Re: Distruggere un puntatore

    Neanche la new

  • Re: Distruggere un puntatore

    29/10/2024 - oregon ha scritto:


    Neanche la new

    a va bene grazie, è che quando chiudo il mio software ci sono delle memory leak..quindi non dipendono da questi puntatori?

  • Re: Distruggere un puntatore

    Ti è già stato detto che i memory leak sono causati dagli oggetto CDC e CBitmaps come riportato nel log.

    Poi se usi male newe deletr in maniera sbagliata le cose peggiorano 

Devi accedere o registrarti per scrivere nel forum
5 risposte