segmentation fault ( core dump ), bin c-dummie ;-p



  • kann mir einer von euch profis bitte sagen, was ich falsch gemacht habe?

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int main()
    {
    int i = 0;
    float min, max, m;
    char string [500];
    char * pch;
    char * pEnd;
    double dbl;
    FILE * pFile;
    char * buffer;

    min = max = m = 0;
    pFile = fopen("mur2eur.dat","r");
    if (pFile==NULL) perror ("Error opening file");
    buffer = (char*) malloc (500);
    if (buffer==NULL) exit (1);
    fgets (string , 500 , pFile);
    pch=strchr(pch+1,'s');
    pch = strchr(string,'\t');
    dbl = strtod (string,&pEnd);
    i = i+1;
    min = dbl;
    max = dbl;
    free ( buffer );
    while (!feof(pFile))
    {
    buffer = (char*) malloc (i+1);
    if (buffer==NULL) exit (1);
    fgets (string , 500 , pFile);
    pch=strchr(string,'\t');
    dbl = strtod(string,&pEnd);
    i = i+1;
    if(dbl <= min)min = dbl;
    if(dbl >= max)max = dbl;
    free ( buffer );

    }
    fclose(pFile);
    m = ( min + max ) / 2;
    printf("Anzahl Umtaeusche: %d\n",i);
    printf("kleinster EUR-Wert: %f\n",min);
    printf("groesster EUR-Wert: %f\n",max);
    printf("mittlerer EUR-Wert: %f\n",m);

    return 0;
    }

    mur2eur.dat-inhalt:
    20.000000 0.607200
    6.500000 0.197340
    75.879997 2.303717
    45.000000 1.366200

    die zwischenräume sind \\t

    vielen dank



  • Sowas kann man nicht lesen. Bitte editiere dein Post und benutze CPP Tags und rücke deinen Code ein.



  • @funny
    nur damit du verstehst, was supertux meint... im origianal hast du es doch auch eingerückt? wieso nutzt du nicht das wunder der codetags 😉

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
        int i = 0;
        float min, max, m;
        char string [500];
        char * pch;
        char * pEnd;
        double dbl;
        FILE * pFile;
        char * buffer;
    
        min = max = m = 0;
        pFile = fopen("mur2eur.dat","r");
        if (pFile==NULL) perror ("Error opening file");
        buffer = (char*) malloc (500);
        if (buffer==NULL) exit (1);
        fgets (string , 500 , pFile);
        pch=strchr(pch+1,'s');
        pch = strchr(string,'\t');
        dbl = strtod (string,&pEnd);
        i = i+1;
        min = dbl;
        max = dbl;
        free ( buffer );
        while (!feof(pFile)) 
        {
            buffer = (char*) malloc (i+1);
            if (buffer==NULL) exit (1);
            fgets (string , 500 , pFile);
            pch=strchr(string,'\t');
            dbl = strtod(string,&pEnd);
            i = i+1;
            if(dbl <= min)min = dbl;
            if(dbl >= max)max = dbl;
            free ( buffer );
    
        }
        fclose(pFile);
        m = ( min + max ) / 2;
        printf("Anzahl Umtaeusche: %d\n",i);
        printf("kleinster EUR-Wert: %f\n",min);
        printf("groesster EUR-Wert: %f\n",max);
        printf("mittlerer EUR-Wert: %f\n",m);
    
        return 0;
    }
    


  • entschuldigung, komme mit diesem bb-code nicht klar, wenn ich den beitrag abschicke, isser wieder weg, der 2. versuch sollte eigentlich klappen, habs aber nicht hinbekommen, ist halt mein erstes source-file, was ich hierher schicke.
    da nun aber jemand so nett war, es richtig hinzubasteln, wäre ich dankbar, wenn mir nun jemand die frage beantworten könnte.
    danke



  • Das problem liegt bei

    pch=strchr(pch+1,'s');
    

    dies musst du zu

    pch=strchr(string,'s');
    

    ändern, dann geht es...
    Mit Hilfe des Debuggers war dieses Problem eigentlich ganz leicht zu finden...



  • an guenni81:
    vielen lieben dank!!



  • Wenn du mit VC++ arbeitest, dann kannst du mit der F10 Taste den QuellCode Zeilenweise durchgehen, so findet man solche Fehler schnell...



  • hab den dev-c++ zu hause und gcc von unix an der uni,
    danke nochmal


Anmelden zum Antworten