Salve,
da due giurni mi capita una cosa stranissima col programma che sto facendo (sto mettendo le mani al normalmapper della ati), siccome sono "scarsa" con gli array di strutture ho provato a controllare su libri e siti internet ma mi sembra che il mio codice sia corretto (sottolineo *mi sembra* )
Allora il mio problema è questo:
ho una struttura NmRawTriangle
codice:
typedef union
{
   struct { float x, y, z; };
   struct { float v[3]; };
} NmRawPoint;
  
typedef union
{
   struct { float u, v; };
   struct { float uv[2]; };
} NmRawTexCoord;

typedef struct
{
   NmRawPoint vert[3];
   NmRawPoint norm[3];
   NmRawTexCoord texCoord[3];
} NmRawTriangle;
nel mio main creo un array di NmRawTriangle
NmRawTriangle* tris;
e lo passo per riferimento ad una funzione
NmReadTriangles (fp,numTris, &tris)

La mia funzione legge tris e lo inizializza, sarà un array di dimensione numTris
bool
NmReadTriangles (FILE* fp, int numTris, NmRawTriangle** tris)

codice:
(*tris) = new NmRawTriangle [(numTris)];
	if ((*tris) == NULL)
	{
		cerr << "Unable to allocate space for " << (*tris) << " triangles\n";
		return false;
	}
	printf("numtris=%d\n",numTris);
	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;
                tris[i]->vert[0].x=vertex[a][0];
		tris[i]->vert[0].y=vertex[a][1];
		tris[i]->vert[0].z=vertex[a][2];
		tris[i]->vert[1].x=vertex[b][0];
		tris[i]->vert[1].y=vertex[b][1];
		tris[i]->vert[1].z=vertex[b][2];
		tris[i]->vert[2].x=vertex[c][0];
		tris[i]->vert[2].y=vertex[c][1];
		tris[i]->vert[2].z=vertex[c][2];
}
numTris è 1000 se io commento la linea di creazione di tris[i] e le successive la printf che stampa i arriva correttamente a 999.
Invece con quella linea decommentata il programma arriva a 81.
Nel dubbio, siccome non ero sicura di usare correttamente la new ho provato anche con la malloc:

*tris=(NmRawTriangle *)malloc((numtris)*sizeof(NmRawTriangle *));
tris[i]=(NmRawTriangle *)malloc(sizeof(NmRawTriangle));

stesso identico problema: se commento tris[i] arriva correttamente a 999, se decommento si ferma a 81.
Ho provato a debuggare, le assegnazioni sono corrette, i valori dei vertici x y e x sono corretti... quando arriva a 81 esce con una serie lunghissima di

First-chance exception at 0x0012f3d9 in atioctree.exe: 0xC0000005: Access violation writing location 0x10c000e6

in cui camba la locazione ed infine:
Unhandled exception at 0x00031299 in atioctree.exe: 0xC0000005: Access violation writing location 0x10c000e6.
Sono disperata e non so più dove sbattere la testa ho provato un pò di tutto ma senza risultati.. avete qualche idea?
Grazie in anticipo!