2016-04-11 24 views
-1

Ich habe gerade angefangen, mit verknüpften Listen und Strukturen zu arbeiten und bin sehr neu in der Codierung. Der folgende Code ist eine Funktion, die, wenn sie aufgerufen wird, der Struktur von Hunden einen neuen Hund hinzufügt. Ich bekomme keinen Segmentierungsfehler, wenn ich den ersten Hund betrete, aber nur wenn ich einen anderen Hund betrete, bekomme ich dieses Problem. Ich bin mir nicht sicher, wie ich das beheben könnte, also würde jede Hilfe sehr geschätzt werden.Segmentation Fault

if(list == NULL){ 
      list = new_node; 
      return list; 
    } 

    while(p->next != NULL){ 
      p = p->next; 
    } 
    p->next = new_node; 
    return list; 
} 

Antwort

1

Sie müssen nur p initialisieren, bevor die while Schleife am unteren Rand eingeben:

p = list; 
while (p->next != NULL) { 
    p = p->next; 
} 

auf einem nicht verwandten Notiz, früher in der Funktion, wenn ein Duplikat Patientennummer überprüft, Sie wollen wahrscheinlich Um die break; in eine return list; zu ändern, wird die Schleife einfach beendet und der Liste ein neuer Knoten hinzugefügt.

+0

Funktioniert jetzt perfekt! Danke für Ihre Hilfe! – YellowBird

0

Sie müssen hier p zurücksetzen. An diesem Punkt ist es null und Sie deneferenzieren es.

p = list; // add this 

while(p->next != NULL) 
{ 
    p = p->next; 
} 
p->next = new_node; 
return list;