fgets erzeugt memory fault

Gast #1375694
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
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.