Я использую двусвязный список в программе на языке C. Я запутался в освобождении памяти., не имеющий двойного перечня
- Должен ли я освобождать узел списка по узлу?
- Или, назначив головные и хвостовые узлы NULL?
Я использую двусвязный список в программе на языке C. Я запутался в освобождении памяти., не имеющий двойного перечня
Вы должны освободить каждый узел. Если вы просто установите головной и хвостовой узлы в NULL, вы пропустите всю память, выделенную для списка.
Вы должны пройти список и освободить каждый узел. Если вы установите указатели на голову и хвост на NULL, узлы списка все еще находятся в куче, и у вас нет указателей на них, и это классическая утечка памяти.
Вот некоторые псевдокод:
Node* current = head;
while(current != NULL) {
Node* next = current->Next;
free(current);
current = next;
}
// done
Вы могли бы, конечно, траверсы для хвоста к голове - не делает каких-либо серьезных различий.
Если они были динамически распределены, вам нужно освободить узлы. Имейте в виду, что если ваши узлы содержат указатели на некоторые данные, и эти данные также были динамически распределены, вам также необходимо освободить их.
Что-то вроде:
list_node* node = head;
while (node)
{
/* depends */
/* free(node->data); */
list_node* next = node->next;
free(node);
node = next;
}
Пожалуйста, обратите внимание орфографии и форматирования. Этот сайт является более серьезным и требовательным в этом аспекте, чем «средний форум». – AttishOculus
Кроме того, другие пользователи часто останавливаются и исправляют орфографию и форматирование. :) –