#c #memory-leaks #linked-list
#c #утечки памяти #связанный список
Вопрос:
Итак, в основном я пишу код для LinkedList, но я продолжаю получать утечку памяти в результате этого кода здесь. Кто-нибудь может помочь мне найти причину, а также объяснить мне, что я делаю не так?
struct Node* deleteNode(int data, struct Node* head){
struct Node* current = head;
struct Node* previous = NULL;
if(head == NULL){
return NULL;
}
while(current->data != data){
if(current->next == NULL){
return NULL;
}else{
previous = current;
current = current->next;
}
}
if(current == head){
struct Node* temp = head;
head = head->next;
free(temp);
}else
{
previous->next = current->next;
}
current = NULL;
return head;
}
Ответ №1:
Вы никогда не вызываете free()
удаленный узел списка, если он не является первым элементом вашего связанного списка.
Комментарии:
1. Извините, я довольно новичок во всем этом. Что вы имеете в виду? Если я удаляю узел, не следует ли мне освободить адрес этого узла?
2. @JorgeUrena Вам нужно вызывать
free()
узел даже в том случае, когдаcurrent != head
. Аналогично тому, что вы сделали подif (current == head)
блоком.
Ответ №2:
Вы получаете утечку памяти, потому что вы не вызываете free
в случае, когда current != temp
. Все, что вы делаете в else
части, — это просто назначение previous->next = current->next
без удаления текущего узла.
Вы уже нашли узел, который хотите удалить, используя свой while
цикл, поэтому добавьте free(current)
после previous->next = current->next
.