bitte um hilfe bei der fehlersuche



  • #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;
    }
    

    dies ist der inhalt der datei mur2eur.dat:

    20.000000    0.607200
    6.500000    0.197340
    75.879997    2.303717
    45.000000    1.366200
    

    die abstände in mur2eur.dat sollen \\t sein. beim starten des programms kommt die meldung: segmentation fault ( core dump ).brauche ich überhaupt malloc() und free()??? ich blick da noch nicht durch. sorry wegen dem gleichen beitrag, es kam aber bisher keine hilfreiche antwort.
    bin neuling bei der c-programmierung und auf eure hilfe angewiesen.



  • Kannst du mal erklären, was dein Programm überhaupt genau machen soll?
    Dass da ein Segmentation Fault kommt, wundert mich nicht. Du greifst mehrfach auf Speicher zu, der nicht von deinem Programm reserviert ist, ihm also nicht gehört und da greift das Betriebssystem ein und beendet das Programm kurzerhand.



  • @aj
    http://www.c-plusplus.net/forum/viewtopic.php?p=642586#642586
    mehrfachthread.. würde diesen hier löschen



  • funny schrieb:

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

    pch zeigt hier nirgendwohin, also kannst du es nicht als Parameter für strchr benutzen. Dazu kommt, dass du das Ergebnis gleich in der nächsten Zeile wieder überschreibst.

    Mit buffer machst du außer malloc und free gar nichts, auf diese Variable könntest du komplett verzichten, ohne dass sich das Verhalten des Programms ändern würde.

    bin neuling bei der c-programmierung und auf eure hilfe angewiesen.

    Wenn du Neuling bist, dann such dir eine Aufgabe, die deinen Fähigkeiten angemessen ist. Und befolge doch endlich die Hinweise der Helfer hier.



  • "Wenn du Neuling bist, dann such dir eine Aufgabe, die deinen Fähigkeiten angemessen ist."

    --->leider wird man bei uns an der uni ohne rettungsring ins kalte wasser geschmissen und kann sich die aufgaben nicht aussuchen. habe eben noch probleme bei der kombination von mehreren bilbliotheksfunktionen, zumal die mir alle noch nicht 100 %-ig klar sind, entschuldigung vielmals, daß sich hier manche von mir belästigt fühlen. habe ja dennoch wertvolle hinweise bekommen, wofür ich denjenigen wirklich dankbar bin. gelobe besserung beim nächsten mal und hoffe, daß ich nun nicht mehr angefeindet werde.



  • funny schrieb:

    --->leider wird man bei uns an der uni ohne rettungsring ins kalte wasser geschmissen und kann sich die aufgaben nicht aussuchen.

    Was für ein Unsinn. Was hindert dich daran, einfachere Aufgaben zu bearbeiten, bevor du dich mit dieser hier beschäftigst?

    habe eben noch probleme bei der kombination von mehreren bilbliotheksfunktionen, zumal die mir alle noch nicht 100 %-ig klar sind,

    Dann beschäftige dich zuerst mit Programmen, die nur eine Bibliotheksfunktion benutzen.

    entschuldigung vielmals, daß sich hier manche von mir belästigt fühlen.

    Belästigt trifft es nicht ganz. Du strapazierst die Geduld der Helfer, weil du eine erschreckende Lernresistenz zeigst.

    hoffe, daß ich nun nicht mehr angefeindet werde.

    Niemand hat dich angefeindet. Du hast Hinweise und Tipps bekommen, mit dem Ziel, dass wir dir besser helfen können. Nur weil die Tipps nicht durch die Blume ausgesprochen werden, heißt das nicht, dass man dich "anfeindet". Leg dir ein dickeres Fell zu.


Anmelden zum Antworten