fgets erzeugt memory fault

Gast #1375694
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
Persönliche Seite #1375716
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].
Persönliche Seite #1375731
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).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren