Forum: Compiler & IDEs fgets erzeugt memory fault


von mike (Gast)


Lesenswert?

Hi
ich versuche gerade unter uClinux eine Datei einzulesen. soweit 
funktioniert es auch. Bei fgets wird aber schon beim ersten Aufruf ein 
MEMORY FAULT erzeugt und ich hab keine Ahnung warum.
Bitte helft mir weiter...

Die betroffene Funktion:
1
void file_read(FILE *stream) {
2
  char buffer[256];
3
  while(!feof(stream)) {
4
    fgets(buffer, sizeof(buffer), stream);
5
    printf("%s",buffer);
6
  }
7
}

kompiliert wird das Programm mit dem "arm-elf-gcc" Cross-Compiler

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Wo knallt es - in feof(), fgets() oder printf() oder kann bereits der 
fette buffer zur Laufzeit nicht mehr auf dem Stack angelegt werden?

Ich könnte mir vorstellen, dass buffer nicht mit einem Nullbyte 
abgeschlossen ist und printf einen Bufferoverflow bekommt, weil es mit 
%s hinter das Ende von buffer liest. Setz doch mal ein definiertes 
Nullbyte z.B. an buffer[1].

von mike (Gast)


Lesenswert?

knallen tut es bei fgets().
ich hab ca 12MB Ram zur verfügung, an dem darf es nicht scheitern

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Dann bist du übel dran, da kein offensichtlicher Fehler im obigen Code 
ist.

Kontrolliere die an fgets übergebenen Parameter. Insbesondere ob beim 
fopen bereits ein Fehler bei stream vorgekommen ist. Ich würde auch 
mal statt mit 256 mit weniger Zeichen testen und unbedingt buffer mit 
dem Nullbyte abschliessen und den Rückgabewert von fgets auswerten (wenn 
der noch zurückgegeben wird).

von mike (Gast)


Lesenswert?

Danke hast mich auf den richtigen weg gebracht!
der File-Pointer war in der funktion NULL - also funktioniert bei fopen 
irgendetwas nicht hin.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.