Итак, я пытаюсь сделать метод для очистки двусвязного списка для школы, где двусвязный список и узлы определены как:
struct word_entry
{
char *unique_word ;
int word_count ;
} ;
struct node
{
struct word_entry one_word ;
struct node *p_previous ;
struct node *p_next ;
} ;
struct linked_list
{
struct node *p_head ;
struct node *p_tail ;
struct node *p_current ;
} ;
У меня есть метод для очистки связанного списка с помощьюделая
int clear_linked_list( struct linked_list *p_list ) //return how many nodes were cleared
{
if (p_list->p_head == NULL) {
return 0;
}
else {
int count = 0;
struct node *curr = p_list->p_head;
while (curr != NULL) {
struct node *next = curr->p_next;
free(curr->one_word.unique_word);
free(curr);
curr = next;
count++;
}
return count;
}
}
Я делаю free () для curr-> one_word.unique_word, потому что это массив символов malloc'd.Меня научили освобождать при использовании malloc, вот и все.
Проблема, с которой я сталкиваюсь, заключается в том, что я получаю «фиктивный указатель (double free?)» И дамп ядра при запуске тестового файла, предоставленногомой профессор.Я работал над этим в течение нескольких часов и не могу понять, где (или как) я звоню бесплатно дважды.