Problem mit flose
-
Hallo,
ich bekomme eine "double free or corruption" fehlermeldung bei meinem Programm. Und zwar bei fclose. WEiß jemand woran das liegt? Es wir auf alle fälle nicht zweimal aufgerufen.
Danke!
mfg,
shedFILE* fp = fopen(filename , "r"); if(fp != NULL) { char c=fgetc(fp); int i; for (i=0; c != EOF ;c=fgetc(fp), i++) { buffer[i]= c; } buffer[i] = '\0'; fclose(fp); }
-
Warum machst du dazu einen zweiten Thread auf?
Vermutlich ist buffer einfach nur zu klein. Die Definition hast du ja leider nicht gezeigt.
-
shed schrieb:
Hallo,
ich bekomme eine "double free or corruption" fehlermeldung bei meinem Programm. Und zwar bei fclose. WEiß jemand woran das liegt? Es wir auf alle fälle nicht zweimal aufgerufen.
Danke!
mfg,
shedFILE* fp = fopen(filename , "r"); if(fp != NULL) { char c=fgetc(fp); int i; for (i=0; c != EOF ;c=fgetc(fp), i++) { buffer[i]= c; } buffer[i] = '\0'; fclose(fp); }najo, das problem liegt sicherlich bei was anderem.
weil EOF nicht in einen typ char reinpasst wirst du niemals EOF erkennen.
verwend int.ist ja so definiert soweit ich weiss
int fgetc(FILE* stream)
-
fread

-
Mein Problem ist, das es unter Windows mit allen 10 Files funktioniert. In Linux aber nur mit 8 davon. Das verstehe ich nicht ganz weil ich ja nix geändert habe.
Den Buffer erstelle ich mit char * buffer = new char[lengthOfFile]. Wobei ich lengthOfFile in einer eigenen Methode ermittle. Wie gesagt unter Windows läuft alles.
mfg,
ShedSorry wegen dem zweiten thread aber ich hab gedacht vielleicht liest des im Linux-forum keiner.

-
Hä? schrieb:
fread

natürlich ist fread besser

aber den "fehler" mit fgetc macht jeder einmal, wär doch schade wenn man das nicht irgendwo niederschreibt ... hrhr
-
Aber es sollte doch mit fget auch gehn oder?
mfg
-
Wenn Du den Rückgabewert von fgetc in einem int speicherst, damit EOF überhaupt reinpasst, dann ja. Das wurde aber bereits gesagt.
BTW, das Thema EOF und char hatten wir kürzlich höchst ausführlich, hat's sogar bis in die Netzkultur geschafft.
-
shed schrieb:
Den Buffer erstelle ich mit char * buffer = new char[lengthOfFile]. Wobei ich lengthOfFile in einer eigenen Methode ermittle.
Dir ist aber hoffentlich klar, dass du durch die "Nullterminierung" ein Byte mehr reinschreibst?
-
Meiner Ansicht nach hast du zumindest ein Problem mit
char c=fgetc(fp);Da wird meines Erachtens nie ein EOF zurückkommen, weil EOF in dem Typ char nicht darstellbar ist!!!
c sollte vom Typ int sein.
-
...
-
Martin G schrieb:
Meiner Ansicht nach hast du zumindest ein Problem mit
char c=fgetc(fp);Da wird meines Erachtens nie ein EOF zurückkommen, weil EOF in dem Typ char nicht darstellbar ist!!!
c sollte vom Typ int sein.ein ganz ein schneller...