Segmentation fault bei fclose



  • Ich habe das Problem, dass der Funktionsaufruf fread() meinen Filepointer zerstoert,
    so dass ich die geöffnete Datei nicht mehr schließen kann.
    Der Versuch, eine Kopie des Pointers anzulegen, scheitert auch.

    #include <stdio.h>
    
    int main(void) {
        FILE *fp, *fp_kopie;
        uint8_t b512[512];
    
        if((fp = fopen("test.txt","r")) == NULL) {
    		printf("Kann Test-Datei nicht oeffnen\n");
    		return 1;
        }
        fp_kopie = fp;
        fread(b512,512, sizeof(uint8_t),fp_kopie);
        fclose(fp); // hier stürzt das Programm mit SIGSEGV ab, egal ob fp oder fp_kopie
        return 0;
    }
    

    Der Debugger zeigt mir nach dem fread weder für fp noch für fp_kopie die korrekte Ursprungs-Addresse an.

    Bin dankbar für jeden Hinweis.



  • Problem hat sich erledigt. War ein Schreibfehler im Quellcode. Statt 512 hat fread 521 Zeichen eingelesen und ist dann abgestürzt. Sorry.



  • gigg schrieb:

    Problem hat sich erledigt. War ein Schreibfehler im Quellcode. Statt 512 hat fread 521 Zeichen eingelesen und ist dann abgestürzt. Sorry.

    Das zeigt mal wieder zwei Dinge.
    1. Immer Copy&Paste vom Code der Fehler verursacht
    2. Die Arraygröße über define oder const festlegen.



  • DirkB schrieb:

    gigg schrieb:

    Problem hat sich erledigt. War ein Schreibfehler im Quellcode. Statt 512 hat fread 521 Zeichen eingelesen und ist dann abgestürzt. Sorry.

    Das zeigt mal wieder zwei Dinge.
    1. Immer Copy&Paste vom Code der Fehler verursacht
    2. Die Arraygröße über define oder const festlegen.

    zu 1.
    Ist schwierig, wenn man nur die fehlerrelevanten Teile des Codes zeigen will und nicht die Leser mit 1000 Zeilen Quellcode bombardieren will.

    zu 2.
    Werde ich definitiv in Zukunft so machen. Danke.


  • Mod

    gigg schrieb:

    zu 1.
    Ist schwierig, wenn man nur die fehlerrelevanten Teile des Codes zeigen will und nicht die Leser mit 1000 Zeilen Quellcode bombardieren will.

    Das heißt, du bist zu faul, deine Frage sinnvoll zu stellen? Siehe dir mal den dritten Link in meiner Signatur an.



  • gigg schrieb:

    zu 1.
    Ist schwierig, wenn man nur die fehlerrelevanten Teile des Codes zeigen will und nicht die Leser mit 1000 Zeilen Quellcode bombardieren will.

    Du sollst auch nur die relevanten Teile kopieren.

    Andererseits hast du dein Beispielprogramm noch nicht mal compiliert?.
    Sonst hättest du festgestellt, dass das funktioniert und hättest den Fehler gefunden, bevor du deine Frage gestellt hast.



  • SeppJ schrieb:

    Das heißt, du bist zu faul, deine Frage sinnvoll zu stellen? Siehe dir mal den dritten Link in meiner Signatur an.

    Nicht faul, aber höflich den anderen Forumsteilnehmern gegenüber.
    Im Gegensatz zu dir.



  • DirkB schrieb:

    Andererseits hast du dein Beispielprogramm noch nicht mal compiliert?.
    Sonst hättest du festgestellt, dass das funktioniert und hättest den Fehler gefunden, bevor du deine Frage gestellt hast.

    Ich habe einen Fehler gemacht und mich entschuldigt. Und mich bedankt. Reicht das?


Anmelden zum Antworten