В следующей программе, которая предназначена только для образовательных целей, я не могу понять, почему free()
вызывает ошибку сегментации.В последнем цикле я пытаюсь очистить мой список двухсвязных указателей, но даже один free()
в first_node
(вне цикла, если я его там размещу) приводит к ошибке сегментации ... Кто-нибудь видит, почему?
#include <stdio.h>
#include <stdlib.h>
typedef struct Node Node;
struct Node {
Node *prev;
Node *next;
int val;
};
int main() {
Node *first_node;
Node *active_node;
Node *prev_node;
first_node->val = 0;
active_node = first_node;
for (int c = 1; c < 10 ; c = c + 1) {
active_node->next = (Node *)malloc(sizeof(Node));
active_node->next->val = c;
active_node->next->prev = active_node;
prev_node = active_node;
active_node = active_node->next;
}
active_node = first_node;
while (active_node) {
printf("Node: %d\n", active_node->val);
prev_node = active_node;
active_node = active_node->next;
}
active_node = first_node;
while (active_node) {
prev_node = active_node;
active_node = active_node->next;
free(prev_node);
}
return 0;
}
Я уверен, что это free()
, так как когда я комментирую эту строку, программа работает нормально.
Мой вывод выглядит так:
Node: 0
Node: 1
Node: 2
Node: 3
Node: 4
Node: 5
Node: 6
Node: 7
Node: 8
Node: 9
Segmentation fault (core dumped)