Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [c++] matrici e leak

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

    [c++] matrici e leak

    ciao.
    Ho le seguenti funzioni:

    codice:
    void CMaterialSkin::UpdateAnimation(long nTime)
    {	
    	D3DXVECTOR4* pmatrices = new D3DXVECTOR4[MAXBONES*3]; 
    	m_pSkeleton->updateAnimation(nTime, pmatrices);
    	int nCountvfloat4 = sizeof(*pmatrices)/sizeof(*pmatrices[0]);; 
    	HRESULT hr = m_pMatrices->SetRawValue(*pmatrices, 0, MAXBONES*3* sizeof(D3DXVECTOR4));
    	delete[] pmatrices;
    
    	}
    
    }
    e questa chiamata dalla precedente:
    codice:
    void CSkeleton::updateAnimation(int frame, D3DXVECTOR4* pmatrices)
    {	
    	for(int i = 0 ; i < GetBoneCount(); i++)
    	{
    		CBone* pb = GetBone(i);
    		CBone* pbParent = GetBone(pb->m_nIdParent);
    
    		D3DXMATRIX pmxAnimation = pb->getAnimationMatrix(0, 0);
    		if(D3DXMatrixIsIdentity(&pmxAnimation))
    			pmxAnimation *= pb->getMatrixLocal();
    
    		pb->SetFinalMatrix( pmxAnimation /** pb->getMatrixLocal()*/);
    		if (pb->m_nIdParent >= 0)
    			pb->SetFinalMatrix(pb->getBoneFinalMatrix() * pbParent->getBoneFinalMatrix());
    	
    	}
        for(int i = 0 ; i < GetBoneCount(); i++)
    	{
    		CBone* pb = GetBone(i);
    		CBone* pbParent = GetBone(pb->m_nIdParent);
    		
    		if(pbParent != NULL)
    		{
    			pb->SetFinalMatrix(pb->getInvBinMatrix() * pb->getBoneFinalMatrix()* pbParent->getBoneFinalMatrix());
    			D3DXMATRIX m = pb->getBoneFinalMatrix();		
    			pmatrices[i*3 +0] = D3DXVECTOR4(m._11, m._21,m._31, m._41);
    			pmatrices[i*3 +1] = D3DXVECTOR4(m._12, m._22, m._32, m._42);
    			pmatrices[i*3 +2] = D3DXVECTOR4(m._13, m._23, m._33, m._43);
    		}
    		else
    		{
    			pb->SetFinalMatrix( pb->getInvBinMatrix() * pb->getBoneFinalMatrix());
    			D3DXMATRIX m = pb->getBoneFinalMatrix();		
    			pmatrices[i*3 +0] = D3DXVECTOR4(m._11, m._21,m._31, m._41);
    			pmatrices[i*3 +1] = D3DXVECTOR4(m._12, m._22, m._32, m._42);
    			pmatrices[i*3 +2] = D3DXVECTOR4(m._13, m._23, m._33, m._43);
    		}
    	}
    	
    }
    il problema è che queste due funzioni mi generano un sacco di leack.
    Non riesco a capire cosa devo cancellare col delete e sono sicuro che il problema è in queste due funzioni perchè eliminandole non vengono generate schifezze.
    grazie.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Perché insisti col chiamare "leaks" quelli che sono errori d'accesso alla memoria?
    Comunque a occhio il problema mi pare qui:
    Devi aggiustare il contatore perché rientri nel range massimo dell'array.
    codice:
    for(int i = 0 ; i < GetBoneCount()-3; i+=3)
    in virtù del i*3+0, i*3+1, i*3+2
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.