Seltsames Verhalten, Speicherzugriffsfehler/Buszugriffsfehler

OP Persönliche Seite #2367478
Lesenswert?
• ▲
▼
Ich komme gerade nicht weiter, das Programm hat heute Nachmittag noch 
funktioniert, was genau ich verändert habe, kann ich leider nicht mehr 
nachvollziehen.

Das Programm soll einen Parser für 16bit Intel-Hexfiles darstellen.

Im Anhang der komplette Code, hier der betreffende Teil vom Code:
1
FILE *hexfile;
2
struct stat buf;
3
unsigned char c;
4
stat(argv[1], &buf);
5
int fsize = buf.st_size;
6
...
7
hexfile = fopen(argv[1], "rb");
8
printf("file '%s' opened\n", argv[1]);
9
printf("test1\n");
10
while(fsize > 0) {
11
         printf("test2");
12
         c = fgetc(hexfile);
13
         ...

Die Ausgabe "test2" wird nicht mehr angezeigt, "test1" schon, es kommt 
beim Aufrufen immer abwechselnd Speicherzugriffsfehler und 
Buszugriffsfehler.

Die Übergabe vom Hexfile-Dateinamen und stat funktioniert, hier mal die 
beiden verschiedenen Ausgaben:
1
filesize 188 bytes
2
file 'hexfile.hex' opened
3
test1
4
Bus-Zugriffsfehler
5

6
filesize 188 bytes
7
file 'hexfile.hex' opened
8
test1
9
Speicherzugriffsfehler


Ich hoffe, ihr könnt mir da weiterhelfen...
Angehängte Dateien:
#2367521
Lesenswert?
• ▲
▼
Wie Stefan korrekt schreibt, ist `i` nicht initialisiert.

Die Ausgabe von
1
printf("test2");
fehlt, weil diese Ausgabe normalerweise in einem Puffer landet. Hängt 
man ein "\n" ran, wird dieser Puffer ausgegeben, alternativ geht auch:
1
fflush(NULL);

Beim Debuggig mit printf verwirrt dies immer etwas, wenn Zugriffsfehler 
auftreten - der Puffer wird dann verworfen und nicht ausgegeben.
Gast #2367555
Lesenswert?
• ▲
▼
Jim Meba schrieb:
> Die Ausgabe vonprintf("test2");fehlt, weil diese Ausgabe normalerweise in einem
> Puffer landet. Hängt man ein "\n" ran, wird dieser Puffer ausgegeben, alternativ
> geht auch:fflush(NULL);

Es würde auch ein
1
fflush(stdout);
 reichen.

> Beim Debuggig mit printf verwirrt dies immer etwas, wenn Zugriffsfehler
> auftreten - der Puffer wird dann verworfen und nicht ausgegeben.

Deshalb gibt's ja eigentlich auch stderr, das genau aus diesem Grund 
nicht gepuffert ist.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.