bus error bei verketteter liste



  • hallo,

    unten stehendes programm soll erst daten aus einer textdatei in ein array und dann weitere daten aus der selben datei in eine eine verkettete liste speichern.

    der inhalt der datei sieht so aus:

    8
    Auto
    Fahrzeug
    Maschine
    Boot
    Nachen
    Kraftfahrzeug
    Blechkiste
    Gegenstand

    H Fahrzeug Auto
    H Fahrzeug Boot
    S Auto Kraftfahrzeug
    S Auto Blechkiste
    S Boot Nachen
    S Nachen Boot
    H Maschine Auto
    Y Auto Fahrzeug
    Y Boot Fahrzeug
    Y Fahrzeug Gegenstand

    das problem liegt im letzten teil des programmes, in der verketteten liste. ich kann das programm kompilieren, bekomme aber jedes mal einen bus error. ich habe versucht den teil mit der liste überall zu verändern und teil für teil auszukommentieren, aber es bleibt immer ein bus error. ich glaube, dass vielleicht ein logischer fehler in den anweisugen für die liste ist, aber ich finde ihn einfach nicht. wäre super wenn mir jemand helfen könnte.

    gruß und danke, bastian

    /*Liest die wörter aus der datei und schreibt sie in ein struct, verkettete liste*/
    #include<stdlib.h>
    #include<stdio.h>
    #include<string.h>

    int x, y;

    typedef struct relations {
    char relType;
    char *word;
    char *dest;
    struct relations *next;
    }Relations;

    int main(void)
    {
    FILE *fp;
    char buf, word[80], dest[80];

    Relations *neu = NULL;
    Relations *head = NULL;
    Relations *aktuell = head;

    if( (fp = fopen("eingabe.txt", "r")) == NULL)
    {
    fprintf(stderr, ("Fehler\n"));
    exit(1);
    }

    fscanf(fp, "%d", &x);
    char words[x][20];

    for(y=0; y < x; y++)
    {
    fscanf(fp, "%s", words[y]);
    }

    for(y=0; y < x; y++)
    {
    printf("%s\n", words[y]);
    }
    fscanf(fp, "%c", &buf);
    fscanf(fp, ">%c %s %s\n", &buf, word, dest);

    neu=(Relations*)malloc(sizeof(Relations));
    neu->next=head;
    head = neu;
    neu->relType = buf;
    strcpy(neu->word, word);
    strcpy(neu->dest, dest);

    aktuell=head;
    while(!feof(fp)){
    fscanf(fp, ">%c %s %s\n", &buf, word, dest);
    while (aktuell -> next) aktuell = aktuell -> next;
    neu = (Relations*) malloc(sizeof(Relations));
    aktuell -> next = neu;
    neu -> next = NULL;
    neu->relType = buf;
    strcpy(neu->word, word);
    strcpy(neu->dest, dest);
    printf("%c", buf);
    }

    fclose(fp);
    return 0;
    }



  • neu=(Relations*)malloc(sizeof(Relations));
    neu->next=head;
    head = neu;
    neu->relType = buf;
    strcpy(neu->word, word);
    strcpy(neu->dest, dest);

    Du hast keinen Speicher für neu->word und neu->dest reserviert.
    Das ist das erste, was ich auf die Schnelle gesehen habe.
    Sollte aber nicht zum Bus Error sondern zum Segmentation Fault führen,
    also ist da bestimmt noch ein anderer Bug drin.


Anmelden zum Antworten