fclose, dann absturz?
-
hallo
ich versuche eine 15kb große datei auszulesen, müsste ja nicht all zu schwer sein, doch irgendwie stürzt das programm nach dem schließen der datei ab. wenn ich glück bzw pech hab gibt es ein fehler, sehr komisch, vielleicht fummel ich da irgendwie in anderen Speicherbereichen rum...die datei besteht aus einem 5 zeichen langen string am anfang(XYZ11 z.b.)und dann aus lauter floats die sind ja 4 bytes groß:
// fTo = FILE* // fPts[x][y] ist jeweils ein float fwrite(&fPts[iPly[i][0]][0],1,sizeof(float),fTo); fwrite(&fPts[iPly[i][0]][1],1,sizeof(float),fTo); fwrite(&fPts[iPly[i][0]][2],1,sizeof(float),fTo); fwrite(&fPts[iPly[i][1]][0],1,sizeof(float),fTo); fwrite(&fPts[iPly[i][1]][1],1,sizeof(float),fTo); fwrite(&fPts[iPly[i][1]][2],1,sizeof(float),fTo); fwrite(&fPts[iPly[i][2]][0],1,sizeof(float),fTo); fwrite(&fPts[iPly[i][2]][1],1,sizeof(float),fTo); fwrite(&fPts[iPly[i][2]][2],1,sizeof(float),fTo); fwrite(&fPts[iPly[i][3]][0],1,sizeof(float),fTo); fwrite(&fPts[iPly[i][3]][1],1,sizeof(float),fTo); fwrite(&fPts[iPly[i][3]][2],1,sizeof(float),fTo);
das sind dann pro block 48 bytes das 329 mal ergibt 15792 Bytes + 5 Header Bytes. nachgeprüft, stimmt!
dann hab ich die laden-routine geschrieben, die etwas komplexer istFILE *fFile; fFile = fopen("datei.dat","r"); //... // Schleife float fX,fY,fZ,fX2,fY2,fZ2,fX3,fY3,fZ3,fX4,fY4,fZ4; fread(&fX,1,sizeof(float),fFile); fread(&fY,1,sizeof(float),fFile); fread(&fZ,1,sizeof(float),fFile); fread(&fX2,1,sizeof(float),fFile); fread(&fY2,1,sizeof(float),fFile); fread(&fZ2,1,sizeof(float),fFile); // ... usw fclose(fFile);
Ich hoffe da sind jetzt keine fehler drin...
das obere geht doch wenn ich das r zum rb mache(wo ist eigentlich der unterschied) schmiert mir das komplette ding ab...
gedebuggt hab ich auch schon, find aber nichts auffallendes, nur das er manchmal 128 blöcke ließt manchmal auch noch 256, aber nie 329. ab 128 springt der file pointer irgendwie 2000 zeichen weiter. liegt wahrscheinlich daran das ich irgendwo im anderen speicher bin, doch meine selbst allokierten objekte hab ich nochmal überprüft, wenn dann liegt es am allokierten speicher von FILE* fFile;danke schonmal für eure hilfe
-
Schleife verwenden !!
und array!!!while(!feof(fFile))
-
Ich wusste das das Probleme bringt:
das ist nicht das problemm ich benutze die schleife und auch ein array, nur ist der code so complex das ich ihn hier nicht posten kann, weil er zu lang wär... vielleicht liegt es am buffer, das der zu klein ist, wenn er bei 128*48 bytes angekommen ist macht er einen riesiegen spruch und ist 2000 bytes weiter?
merkwürdiges verhalten...
-
warum verwendest du file ptr, nimm doch die iostream klassen dafuer
-
spjoe schrieb:
Schleife verwenden !!
und array!!!while(!feof(fFile))
Bitte nie feof verwenden, wenn man nicht weiß, was man tut. In C schreibt man im wesentlichen etwas wie "while(fread(...))". feof liefert nämlich erst dann einen EOF-Zustand, wenn der bereits gelesen wurde, also anders als in Pascal.