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 ++;
	
}