*jiriki*: C++: Corruption of heap error bei fclose()

Beitrag lesen

Moin Leute,

Bin gerade dabei, ne kleine C++-/OpenGL-Anwendung zu schreiben, in der kleine Raumschiffmodelle geladen werden und durchs Weltall fliegen können. Um die leider nicht unendlichen Weiten des Weltalls zu simulieren, will ich ne ziemlich große Kugel um den Weltkoordinatenursprung legen, mit Normalen nach innen und ner Weltall-Textur belegen.

Fürs Laden der Modellkoordinaten aus einem obj-File in entsprechende Arrays (Vertices,Vertices der Texturen,Faces) hab ich nun ne Funktion WavefrontIrrakuri von meinem baskischen Prof genommen und angepasst. Soweit so schön, er lädt mir jetzt alle Koordinaten entsprechend in die Arrays. Leider bringt er mir jedoch beim Schließen (fclose()) des Filestreams (Stream zu obj-File) den folgenden Fehler:

HEAP[Universo.exe]: Invalid Address specified to RtlValidateHeap( 00880000, 014B3960 )
Windows has triggered a breakpoint in Universo.exe.

This may be due to a corruption of the heap, and indicates a bug in Universo.exe or any of the DLLs it has loaded.

Der Code von Beginn des Dateilesens bis dessen Ende ist:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  
fitx=fopen(fitxiz,"r");  
  
k=0;  
j=0;  
m=0;  
  
  
for (i=0;i<numvert;i++) {  
    tablavert[i].zenbataurpegitan=0;  
    tablavert[i].normala.x = 0.0;  
    tablavert[i].normala.y = 0.0;  
    tablavert[i].normala.z = 0.0;  
}  
  
while (fscanf(fitx,"\n%[^\n]",lerroa)>0)  
{  
    switch (lerroa[0])  
    {  
        case 'v':  
        {  
            if( lerroa[1] == ' ' )  
            {  
                printf( "v!" );  
                sscanf(lerroa+2,"%lf%lf%lf", &(tablavert[k].koord.x), &(tablavert[k].koord.y), &(tablavert[k].koord.z));  
                k++;  
            }  
  
            else if( lerroa[1] == 't' )  
            {  
                printf( "vt!" );  
                sscanf(lerroa+3,"%lf%lf",&(tablatexturas[m].x), &(tablatexturas[m].y));  
                m++;  
            }  
        }  
        break;  
  
        case 'f':  
        {  
  
            tablacaras[j].numvert = 3;  
            tablacaras[j].tablaindvert = (int *)malloc(tablacaras[j].numvert*sizeof(int));  
            tablacaras[j].tablaindtext = (int *)malloc(3*sizeof(int));  
  
            sscanf(lerroa+2,"%d/%d/%d %d/%d/%d", &(tablacaras[j].tablaindvert[0]), &(tablacaras[j].tablaindvert[1]), &(tablacaras[j].tablaindvert[2]), &(tablacaras[j].tablaindtext[0]), &(tablacaras[j].tablaindtext[1]), &(tablacaras[j].tablaindtext[2]));  
  
            // Jeder Vertex speichert in zenbataurpegitan in wievielen Faces er vertreten ist  
            for (i=0; i<tablacaras[j].numvert; i++)  
            {  
                   tablavert[tablacaras[j].tablaindvert[i]].zenbataurpegitan++;  
            }  
            j++;  
        }  
        break;  
    }  
}  
  
fclose(fitx);  

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Danke für jeden Hinweis.