Ich versuche, eine Push-Funktion für eine verknüpfte Liste zu implementieren, aber das folgende Programm verursacht einen Segmentierungsfehler. Ich frage mich ein paar Dinge: Was ist der Standardwert für Eigenschaften einer Struktur? Es scheint, dass ich den Wert head->next
manuell auf NULL
setzen muss. Was ist der Standardwert von head->next
dann?Standardwerte für Eigenschaften von C Struct
Ich glaube, der Grund, warum das Programm bricht, weil in der Push-Funktion, head->next != NULL
es so dann die Leitung führt head = head->next
, die mich führt zu fragen, was der Wert von head->next
ist, wenn es nicht NULL
ist und warum dies bewirkt, dass ein Segmentierungsfehler?
typedef struct Node {
struct Node *next;
int data;
} Node;
void push(Node *head, int data);
int main()
{
struct Node *head = malloc(sizeof(Node));
head->data = 1;
// Works when I uncomment this line
// head->next = NULL;
push(head, 2);
return 0;
}
/* Insert */
void push(Node *head, int data) {
while (head != NULL) {
if (head->next == NULL) {
Node *n = malloc(sizeof(Node));
n->data = data;
head->next = n;
break;
}
head = head->next;
}
}
Zwei downvotes und keine Kommentare? In dem Bemühen, Ihnen zu helfen - Sie werden wahrscheinlich aus Mangel an Forschungsaufwand abgelehnt (wahrscheinlich?), Weil, wie die folgende Antwort sagt, "Lesen sie vor der Zuweisung ist undefiniertes Verhalten", das ist relativ allgemein bekannt, als alle C-Tutorial, vor allem eines auf verknüpften Listen, hätte Ihnen wahrscheinlich gesagt. –