Segmentation fault (core dumped)



  • Hi

    ich bekomm nach start meines Programms immer den oben genannten Fehler. Konnte das Problem schon auf eine Funktion einkreisen, die diesen Fehler verursacht, aber hab leider ka wieso das so nicht geht... hier der code

    in int main() steht folgendes

    char **filecontent=NULL;
    
    filecontent = malloc((sizeof(char)*LINE_LENGTH) * filecount);
    
    if(filecontent == NULL) {
    fprintf(stderr, "%s: malloc() konnte für filecontent keinen Speicher reservieren!\n", argv[0]);
    return (EXIT_FAILURE);
    	}
    
    readFile(datei, filecount, filecontent);
    

    filecount liest aus der Datei die Anzahld er Zeilen raus. Des funktioniert auch. In meinen Beispiel hat die Variable den Wert 5.
    LINE_LENGTH hat den Wert 255 per #define

    Hier die readFile() Funktion (die Probleme macht)

    void readFile(FILE *file, int count, char **content)
    {
    	int i=0;
    	char puffer[LINE_LENGTH];
    
    	while(!feof(file))
    	{
    		fgets(puffer, LINE_LENGTH, file);
    		strcpy(content[i], puffer);
    		i++;
    	}
    
    	i=0;
    	while(i<count) {
    		printf("%s\n", content[i]);
    		i++;
    	}
    }
    

    Das Programm kommt bis zu der while Schleife in der Funktion und stürzt dann mit dem Segmentation fault Fehler ab.
    Ich will eigentlich nur jede einzelne Zeile der Datei in ein 2 Dimensionalen Array Speichern. Die Zeilenanzahl ist vorher nicht bekannt und wird eben zuerst mit filecount gezählt.



  • Mach Code mit Debuginformationen und lass es mit valgrind laufen. Im debugger kannst du auch sehen, was du falsch machst.



  • beuschl schrieb:

    Ich will eigentlich nur jede einzelne Zeile der Datei in ein 2 Dimensionalen Array Speichern.

    Du hast aber kein zweidimensionales Array angelegt. Du hast nur ein char**, und tust so, als wäre das ein Array von char*, die auf die Zeilenpuffer zeigen. Du hast aber hinter diesem char** nur einen einzigen großen Puffer, keine Zeiger auf mehrere Puffer für mehrere Zeilen.



  • mit anderen worten

    int i = 0;
    filecontent = malloc(filecount*sizeof(void*));
    
    for (i=0; i < filecount; i++)
        filecontent[i] = malloc((sizeof(char)*LINE_LENGTH));
    


  • ok danke erstmal, das funktioniert jetzt soweit ohne fehler.
    was mich allerdings verwundert ist, dass wenn ich nach Aufruf der Funktion mit einfach den inhalt von filecontent ausgeben lassen will ich nur 5 leere Zeilen erhalte (filecount ist 5 derzeit)

    hier der code nach readFile

    while (i < filecount) {
       printf("%s\n", filecontent[i]);
       fflush(stdout);
       i++;
    }
    

    wie gesagt jetzt hab ich in der konsole dann nur 5 leere Zeilen stehen und weiß nicht woran das liegen könnte..


Log in to reply