Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [C++] problema delete

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    problema delete

    ciao.
    QUeste sono le strutture della mia classe:
    codice:
    struct VERTEX
    {
     GLfloat val[3];
    };
    
    struct NORMAL
    {
     GLfloat val[3];
    };
    
    struct INDEX
    {
    	int nVertex;
    	int nNormalVertex;
    };
    
    struct FACE
    {
    	INDEX *pIndex;
    	int nFaceNormal;
    	int nCount;
    };
    la classe classe ha 3 variabili membro:
    codice:
    m_vertexs = new VERTEX[MAX_VERTEXS];
    m_faces = new FACE[MAX_FACES];
    m_FaceNormals = new NORMAL[MAX_NORMALS];
    questo è il distruttore della classe che mi lascia dei memory leak:
    codice:
    if(m_faces)
    	{
    		for(int i = 0;i < m_nDeleteFacesCount;i++)
    		{
    			delete[] m_faces[i].pIndex;
    	
    		}
    		delete m_faces;
    	}
    	
    	if(m_vertexs)
    	{	
    		delete[] m_vertexs;
    	}
    
    	if(m_FaceNormals)
    	{	
    		delete[] m_FaceNormals;
    	}
    l'unico new nella classe è questo:

    codice:
    void CPolygonData::addFace(int idx[],int idxNormal[])
    {
    	FACE face;
    	NORMAL normal;
    	int size = _msize( idx )/sizeof(int); ;
    	face.pIndex = new INDEX[size];
    	for (int i = 0; i <=size ;i++){
    		face.pIndex[i].nVertex = idx[i];
    		face.nCount = size;
    	}
    	
    	m_faces[m_nFacesCount] = face;
    	m_nFacesCount ++;
    	
    }

  2. #2
    - Verifica che il distruttore di CPolygonData venga effettivamente chiamato;
    - Da chi deriva CPolygonData? Verifica che il distruttore del padre e di CPolygonData siano virtuali, altrimenti il leak è pressoché garantito.

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: problema delete

    Anche m_faces è un array va distrutto con delete[], altrimenti il comportamento è indefinito.

    codice:
    if(m_faces)
    	{
    		for(int i = 0;i < m_nDeleteFacesCount;i++)
    		{
    			delete[] m_faces[i].pIndex;
    	
    		}
    		delete[] m_faces;
    	}

    E il ciclo for era sbagliato: i < size, non i<=size o il comportamento è indefinito.

    codice:
    void CPolygonData::addFace(int idx[],int idxNormal[])
    {
    	FACE face;
    	NORMAL normal;
    	int size = _msize( idx )/sizeof(int); ;
    	face.pIndex = new INDEX[size];
    	for (int i = 0; i <size ;i++){
    		face.pIndex[i].nVertex = idx[i];
    		face.nCount = size;
    	}
    	
    	m_faces[m_nFacesCount] = face;
    	m_nFacesCount ++;
    	
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.