segmentation fault (core dumped) |C Anfänger



  • Hi ich erhalte leider nach dem kompelieren einen segmentation fault (core dumped).Wenn ich Result[100] mache erhalte ich keinen segmentation fault (core dumped). Ich schätze das liegt mit der funktion write_file(); zusammen, da sie auf Speicherplatz zugreift das ich wohl nicht bereitstelle.

    Was mach ich falsch? Der ist nur ein Auschnitt.

    int main(int argc, char **argv) {
    
        // Hier implementiere*char
    int a=0;
    for(int i=0;i<100;i++){
    if(strcmp(bundesland,laender[i] ) == 0 && anzahl<=bewohner[i]) {
    
    a++;	
    }
    
    }
    
    printf("%d",a);
    char *result[a];
    result[a]=(char *)malloc(2000*(sizeof(char)));
    
    char hallo[100][255];
    int j=0;
    
    for(int i=0;i<100;i++){
    if(strcmp(bundesland,laender[i] ) == 0 && anzahl<=bewohner[i]) {
    
    sprintf(hallo[i],"Die Stadt %s hat %d Einwohner\n",staedte[i],bewohner[i]);	
    
    result[j]=hallo[i];
    j++;
    
    }
    }
    
    write_file(result,len);     INFO: |  void write_file(char *result[], int len) {
                                      |     FILE *fp = fopen("resultat.txt", "w");
                                      |        if (fp == NULL){
                                      |    perror("resultat.txt");
                                      |                exit(1);
                                      |                            }
                                      |        for (int i=0; i<len; i++) {
                                      |        fprintf(fp, "%s\n", result[i]);
                                      |                                       }
                                      |                   fclose(fp);
                                      |                        }
    
    return 0;  
    
    free(result);
    
        // Dynamisch allozierter Speicher muss hier freigegeben werden.
    }
    


  • Wie wäre es mal, den Code gescheit zu formatieren?
    Wie wäre es ein Beispiel anzugeben, dass man auch selber übersetzen kann?

    Ich glaube du weißt nicht, was in Zeile 30 passiert.
    Und das len in Zeile 40 ist auch das einzige Vorkommen...


  • Mod

    Die Art und Weise, wie du deinen Code formatierst, ist gut gemeint, aber schlecht gekonnt. Daher ist es schwieriger, dein Problem nach zu vollziehen, als wenn du deine Formatierungsversuche unterlassen hättest. Wie man Probleme nachstellbar und nachvollziehbar macht



  • Solcher Unsinn kommt dabei heraus, wenn man VLA einsetzt.
    Zeile 17+57 zeigen, dass du nichts verstanden hast, sondern einfach drauflos rumprobiert hast, bis der Compiler was produziert hat (die Warnungen hast du dir natürlich auch nicht angeschaut).



  • 'Freundlichkeitslevel' successfully increased over 9000
    ERROR: System shut down, too much 'Freundlichkeit'


Log in to reply