Ich versuche, zwei bereits sortierte verknüpfte Listen temp1
und temp2
zusammenzuführen. Ich erhalte Segmentierungsfehler für dieses Beispiel:segmentation fault (core dumped) Fehler erhalten Drucke vor der Ausführung von 'printf' Anweisungen
Eingang
temp1 : 1->NULL
temp2 : 2->3->4->5->6->NULL
Ausgabe
aber wenn ich entfernen "\ n" von printf
Aussagen dann direkt Segmentierungsfehler druckt.
Warum geschieht das?
Code:
list *merge(list * temp1, list * temp2)
{
list *x, *y, *z;
x = temp1;
y = temp2;
print(x);
print(y);
z = (list *) malloc(sizeof(list));
if (x->key < y->key)
{
z->key = temp1->key;
x = x->next;
}
else
{
z->key = temp2->key;
y = y->next;
}
z->next = NULL;
while (x || y)
{
printf("asdf\n");
if (x == NULL)
{
z = append(z, y->key);
y = y->next;
printf("x\n");
}
if (y == NULL)
{
z = append(z, x->key);
x = x->next;
printf("y\n");
}
if (x && y)
{
printf("x && y\n");
if (x->key < y->key)
{
z = append(z, x->key);
x = x->next;
}
else
{
z = append(z, y->key);
y = y->next;
}
}
}
print(z);
return z;
}
Vielen Dank im Voraus.
Ich habe den Segmentierungsfehler bereits entfernt. Ich frage, warum es verzögert wird, wenn ich das '\ n' von printf-Aussagen entferne?
Willkommen bei Stack-Überlauf! Es klingt, als müssten Sie lernen, wie Sie einen Debugger verwenden, um durch Ihren Code zu gehen. Mit einem guten Debugger können Sie Ihr Programm Zeile für Zeile ausführen und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: [Wie kleine Programme zu debuggen] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –
Fragen Sie, warum Sie einen segfault erhalten oder warum Sie die Ausgabe nicht sehen, wenn Sie die Zeilenumbrüche entfernen? – Kevin
Haben Sie versucht, einen Debugger zu verwenden? Sie ordnen entweder einen Zeiger nicht richtig zu oder überschreiben unerwünschten Speicher irgendwo, vielleicht sogar innerhalb von "append", was nicht angezeigt wird. Sie sollten dies eingrenzen, anstatt zu erwarten, dass andere hier Ihren gesamten Code durchforsten, um ihn zu finden. Auch, [werfen Sie nicht die Rückkehr von 'malloc'] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc). – lurker