У меня есть двусвязный список на C, и я не понимаю, как мне его освободить. Я понимаю, что мне нужно пройти по списку, освобождая каждый узел. Путаница заключается в том, что каждый из моих узлов имеет указатель на некоторые другие данные, и я не уверен, как мне его освободить.
Мой двусвязный список выглядит так:
typedef struct Node_ Node;
typedef struct List_ List;
struct Node_ {
void *data;
Node *next;
Node *prev;
};
struct List_ {
Node *firstNode;
Node *lastNode;
};
Чтобы освободить список, который я создал функция List_free (), которая просматривает список, освобождая каждый узел с помощью Node_free (). Эти функции выглядят так:
void *List_free(List *list)
{
Node *next = list->firstNode;
while(next)
{
Node *node = next;
next = node->next;
Node_free(node);
}
free(list);
}
void Node_free(Node *node)
{
free(node->data);
free(node);
}
Там, где это произойдет, node-> data - это указатель на другую структуру, которая сама содержит указатели. В моем случае я использую один и тот же код списка для хранения двух разных структур.
На мой взгляд, у меня есть следующие варианты:
Правильно ли я думаю, или я пропустил что-то очевидное? Это моя первая попытка сделать C, поэтому я не удивлюсь, если все будет неправильно.