2017-11-28 5 views
-2

Ich versuche, meine verknüpfte Liste zu drucken, bis der nächste Knoten NULL ist, aber ich bin seg Fehler nach dem Drucken von zwei Knoten. mov ist meine verknüpfte Liste Knoten.Segmentierungsfehler beim Versuch, die verknüpfte Liste zu drucken C

Dies ist meine Push-Funktion, die ich verwende, um die Daten den Knoten zuzuweisen.

void push(movie** mov) 
{ 
    movie* new = malloc(sizeof(movie)); 
    new->next = (*mov); 
    (*mov) = new; 
} 

Nachdem die Daten an den Knoten zuweisen, ich rufe push (& mov);

Ich benutzte ein Array von Strukturen vorher, aber da die Menge an Speicher zum Speichern sehr groß wurde, dachte ich, es würde nicht sehr gut funktionieren, da malloc einen zusammenhängenden Speicherblock zuweist, wo ich wie mit Knoten zuordnen kann kleine Speicherblöcke für jeden Knoten.

+0

Frage: Wie stellen Sie sicher 'MOV-> next' ist für den letzten Knoten NULL? –

+6

Autsch! 'free (mov);' und danach 'mov = mov-> next;'. Sie dürfen nicht auf Daten zugreifen, die "frei" -d sind. – Scheff

+0

Sie sollten das lesen: [mcve] –

Antwort

1

Das Problem hier ist in der frei (mov) Linie und was kommt danach.

Sie sind freein 'mov dann versuchen, mov zuzuweisen-> neben ihm sehen Sie, wo das Problem ist, nein?
MOV-> nächstes kann nicht mehr zugegriffen werden, da Sie die Struktur free'd, die es zu speichern wurde

Eine bessere Möglichkeit, eine komplette Liste zu drucken, ist es, eine „vorübergehende“ Variable einzustellen, die jeder wird sehen Knoten der Liste und drucken Sie dabei alle Werte.

Hier ein Beispiel:

void printMovieList(movie** mov) { 
    movie* temp; 

    temp = *mov; 
    while(temp->next != NULL) 
    { 
     printf("%s\n", temp->movie_title); 
     printf("%s\n", temp->...etc...); 
     temp = temp->next; 
    } 
} 
+1

Verdammt, ich fühle mich dumm, das war so offensichtlich. Vielen Dank. – codemonkey

Verwandte Themen