verknüpfte Liste das Programm einfügen und löschen von Knoten
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *next;
} *first = NULL;
void insert() {
struct node *temp;
struct node *nn = (struct node*)malloc(sizeof(struct node));
printf("enter the data\n");
scanf("%d", &nn->data);
temp = first;
while (temp->next != first)
temp = temp->next;
temp->next = nn;
nn->next = NULL;
}
void display() {
struct node *temp;
temp = first;
if (temp == NULL) {
printf("no elements\n");
return;
}
printf("elements in linked list are\n");
while (temp != NULL) {
printf("%d\n", temp->data);
temp = temp->next;
}
}
void deletion() {
struct node *temp;
temp = first;
first = first->next;
temp->next = NULL;
free(temp);
}
int main() {
int op;
do {
printf("1.insertion\n2.deletion\n3.display\n4.exit\n");
printf("enter option\n");
scanf("%d", &op);
switch (op) {
case 1:
insert();
break;
case 2:
deletion();
break;
case 3:
display();
break;
}
} while (op != 6);
}
Dies ist ein Programm, das für einfach verkettete Listen und beim ausführen immer der Fehler "segmentation fault". bitte schlage Idee, diese zu lösen.
Ich bekomme die folgende Ausgabe:
./out
1.insertion
2.deletion
3.display
4.exit
enter option
1
enter the data
23
Segmentation fault
Siehe tinyit.cc/letslearncs/insertion-in-linked-list zum einfügen von Knoten in die verkettete Liste und tinyit.cc/letslearncs/deletion-in-linked-list für das löschen in verknüpften Liste.
InformationsquelleAutor user2458408 | 2013-06-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
... so sind Sie versuchen, den Zugang zu
NULL->next
, natürlich bekommst du auch ein SEG-FAULT, einen debugger verwenden:InformationsquelleAutor Keine Lust
In Ihrem ersten
Insert
die variablefirst
istNULL
...Müssen Sie prüfen, ob die variable null ist, wird die Schleife nicht ausgeführt.
Ändern Sie Ihren code einfügen:
InformationsquelleAutor Manuel Pires
insert
enthält den code(wo
first
ist eine Globale variable, die zunächstNULL
). Das erste mal ausgeführt wird, wird derwhile
Schleife sofort dereferenziert einenNULL
Zeiger. Das hat undefined Folgen, aber einen segmentation Fault, ist nicht verwunderlich.Um dies zu beheben, könnte man ändern
insert
zu schauen, wieBeachten Sie, dass dies auch ein paar andere änderungen
first==NULL
als ein besonderer Fallnn->next = NULL
in allen Fällenmalloc
in Csizeof(*nn))
ist etwas mehr für die Zukunft gerüstet ist (es wird immer noch funktionieren, wenn Sie später ändern Sie den Typ dernn
)malloc
zurückgeben kannNULL
im low-memory -InformationsquelleAutor simonc
Ihre
insert()
Funktionen contanstemp=first;
Aberfirst
null ist, und Sie tun, alstemp->next!=first
dienull->next!=first
was nicht richtig ist.Um dieses Problem zu lösen prüfen, ob
first
null ist oder nicht ,InformationsquelleAutor Rohan
verwenden
statt
InformationsquelleAutor navdeep
InformationsquelleAutor Akhilesh Gupta