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!