000
30.06.2012, 16:03 Uhr
klausuwe
|
Hallo zusammen,
ich hoffe ich bin hier richtig und mir kann geholfen werden. Ich habe ein MFC Projekt, das eine Binärdatei zeilenweise auslesen soll. Dabei habe ich an sich auch keine Probleme, mein Problem ist eher, dass ich ein dynamisches Array eines selbsterstellten Datentyps füllen möchte und dabei das Programm abstürzt, weil es zu einer Beschädigung des Heaps führt
hier mal mein Datentyp:
C++: |
class lin { short x1,y1,x2,y2; unsigned char r,g,b;
public: lin(void); lin(short X1, short Y1, short X2, short Y2, char R, char G, char B); ~lin();
void setX1(short X1); void setY1(short Y1); void setX2(short X2); void setY2(short Y2); void setR(char R); void setG(char G); void setB(char B);
short getX1(); short getY1(); short getX2(); short getY2(); char getR(); char getG(); char getB(); };
|
und hier die methode in der MFC-Klasse:
C++: |
void CChildView::OnAufgabenQuadrate() { typedef struct line { short x1, y1, x2, y2; unsigned char r, g, b; } sLine; sLine lines;
FILE *data = fopen("./Linien.pra", "rb"); FILE *output = fopen("./LinenBin2ANSI.txt", "wt"); //Dynamische Array erzeugen, Anfangslänge auf 1 festlegen int z=1; lin* dynamicArray = NULL; dynamicArray = (lin*) calloc(z, sizeof(lin));
//Schleife zum durchlaufen der Binärdatei while(fread(&lines, sizeof(sLine), 1, data) != NULL) { fread(&lines, sizeof(sLine), 0, data); fprintf(output, "%d %d %d %d %d %d %d\n", lines.x1, lines.y1, lines.x2, lines.y2, lines.r, lines.g, lines.b);
try { lin retVal(lines.x1,lines.y1,lines.x2,lines.y2,lines.r,lines.g,lines.b); dynamicArray[z-1] = retVal; ++z;
//Nach jedem Durchlauf um 1 Feld erhöhen dynamicArray = (lin *) realloc (dynamicArray,1*sizeof(lin));
} catch (int e) { printf("Fehler Nr: "+e); } } }
|
Kann noch nicht ganz nachvollziehen wo mein Fehler steckt, um den ganzen vorzubeugen, es ist eine Uniaufgabe und ich soll nach möglichkeit mit Arrays arbeiten und keine container etc verwenden! Ansich müsste das doch auch so klappen oder? |