C Segmentation Fault 11

Diskutiere C Segmentation Fault 11 im C/C++ Forum; Hallo, ich fange gerade im Studium mit C an, habe davor nur Java programmiert. Jetzt sollte ich in einer Aufgabe eine Datei schrittweise kopieren....

  1. Death_Vader97
    Death_Vader97 Neues Mitglied
    Hallo,
    ich fange gerade im Studium mit C an, habe davor nur Java programmiert. Jetzt sollte ich in einer Aufgabe eine Datei schrittweise kopieren. Dazu habe ich eine Methode geschrieben. Das automatische Kontrollprogramm meiner Hochschule gibt aber dazu folgenden Fehler aus:
    Fehler: Prozess beendet durch Signal (11) Segmentation fault
    Mehr Informationen habe ich darüber nicht und ich kann nicht erkennen, wo der Fehler liegt.
    Hier ist die Methode: http://pastebin.com/6qNEsykJ

    Danke im Voraus. :)
     
  2. Vielleicht hilft dir dieser Kurs hier weiter --> (hier klicken)
  3. Robat
    Robat Aktives Mitglied
    Segmentation fault bedeutet, dass du irgendwo den zugewiesenen Speicher überschreitest.
    Da du mit Arrays arbeitest wird es wahrscheinlich so sein, dass du die Grenzen eines Arrays überschreitest.
    Wie ist denn deine BUFFER_SIZE deklariert / definiert?
    Das hier: char buffer[BUFFER_SIZE+1]; sieht mir komisch aus.

    PS: Nächstes mal deinen Code bitte in [code=Java]...[/code] Tags.
    So kann man dich besser zitieren.

    Gruß
    Robert
     
    VfL_Freak und Death_Vader97 gefällt das.
  4. Thallius
    Thallius Bekanntes Mitglied
    Also ich kann da auf Anhieb keinen Fehler erkennen. Es sei denn die Definition von buffersize fehlt aber dann sollte eigentlich ein undefined value oder sowas kommen.
     
  5. daybyter
    daybyter Mitglied
    Du willst mit printf einen 0-terminierten String schreiben, richtig? buffer[BUFF_SIZE] bleibt immer auf 0, damit dort das printf definitiv abbricht. Aber: was passiert, wenn Du ein Binärfile kopierst, welches einen Block Nullen enthält? Dann bricht doch Dein printf schon vorher ab? Wäre es nicht geschickter den Rückgabewert von fread zu nehmen und diese Anzahl Bytes mit fwrite wieder rauszuschreiben?
     
    Death_Vader97 und Thallius gefällt das.
  6. Death_Vader97
    Death_Vader97 Neues Mitglied
    Danke für die Antworten :)

    Ich konnte das Problem lösen, indem ich fprintf() mit fwrite() ersetzt habe.

    Ich habe das Array ja nicht initialisiert, demnach könnte dort alles mögliche drin stehen, oder? Deswegen wollte ich sicher gehen, dass am Ende eine terminierende 0 steht.
     
  7. Robat
    Robat Aktives Mitglied
    Durch was? Poste bitte deine Lösung für Leute mit dem selben Problem :)
     
  8. Death_Vader97
    Death_Vader97 Neues Mitglied
    Okay, hier ist meine Lösung :)

    Wahrscheinlich kann man sich das Leeren des Buffers am Anfang jetzt auch sparen (und den zusätzlichen Platz für die terminierende 0), aber so funktioniert es auf jeden Fall.
    Code (C):
    int copy_file(char *source,char* dest)
    {

        char buffer[BUFFER_SIZE+1];
        int i;
        for (i = 0 ; i < BUFFER_SIZE ; i++) //clear buffer
            buffer[i] = 0;

        //open source file
        FILE *fSource = fopen(source,"r");
        if (fSource == NULL){
            return 1;
        }

        //open destination file
        FILE *fDest = fopen(dest,"w");
        if (fDest == NULL){
            fclose(fSource);
            return 2;
        }

        //copy data
        while (!feof(fSource) && !ferror(fSource) && !ferror(fDest)){

            int readAmount = fread(buffer,1,BUFFER_SIZE,fSource); //lpad chunk into buffer
            if (ferror(fSource)){
                fclose(fSource);
                fclose(fDest);
                return 3;
            }

            fwrite(buffer,1,readAmount,fDest); //save chunk from buffer into destination
            if (ferror(fDest)){
                fclose(fSource);
                fclose(fDest);
                return 4;
            }
        }

        //end
        fclose(fSource);
        fclose(fDest);
        return 0;
    }
     
Die Seite wird geladen...

C Segmentation Fault 11 - Ähnliche Themen

"Segmentation fault" Virtual Machine Konfiguration Großrechner?
"Segmentation fault" Virtual Machine Konfiguration Großrechner? im Forum Java Basics - Anfänger-Themen
EdgeDetection & Segmentation
EdgeDetection & Segmentation im Forum Codeschnipsel u. Projekte
JTree DefaultMultipleTreeNode Repräsentation ändern
JTree DefaultMultipleTreeNode Repräsentation ändern im Forum AWT, Swing, JavaFX & SWT
Netbeans + Maven: default pom Inhalt
Netbeans + Maven: default pom Inhalt im Forum IDEs und Tools
Synth Defaults überrschreiben
Synth Defaults überrschreiben im Forum AWT, Swing, JavaFX & SWT
Thema: C Segmentation Fault 11

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. segmentation fault: 11