Ciao,
prova con questo codice:
codice:
(*tris) = new NmRawTriangle [(numTris)];
if ((*tris) == NULL)
{
cerr << "Unable to allocate space for " << (*tris) << " triangles\n";
return false;
}
printf("numtris=%d\n",numTris);
NmRawTriangle *tmp_tris = (*tris); // Ora tmp_tris è in effetti l'array
for(int i=0;i<numtris;i++){
int a,b,c;
fscanf(fp,"%d %d %d",&a,&b,&c);
printf("%d %d %d %d\n",i,a,b,c);
//tris[i]=new NmRawTriangle; sbagliato
tmp_tris->vert[0].x=vertex[a][0];
tmp_tris->vert[0].y=vertex[a][1];
tmp_tris->vert[0].z=vertex[a][2];
tmp_tris->vert[1].x=vertex[b][0];
tmp_tris->vert[1].y=vertex[b][1];
tmp_tris->vert[1].z=vertex[b][2];
tmp_tris->vert[2].x=vertex[c][0];
tmp_tris->vert[2].y=vertex[c][1];
tmp_tris->vert[2].z=vertex[c][2];
tmp_tris++; // Punto al successivo triangolo nell'array.
}
La riga (*tris) = new NmRawTriangle [(numTris)]; già crea numTris triangoli...non è necessario creare un triangolo per ogni nuovo elemento. Forse ti sei confusa perchè tris è un doppio
puntatore (necessario per allocare l'array internamente alla funzione e poi passarlo al chiamante) e quindi non puoi usare tris[i] ma devi prima dereferenziare tris per ottenere l'effettivo array di triangoli che ha allocato con la new.
Comunque ricordati che la memoria la devi liberare dopo che l'hai usata.