2013-12-04 7 views
1

Я написал функцию удаления в C, чтобы удалить весь связанный список. Определение функции
Путаница с указателями в C

void delete(LIST **head) 
{ 
    if(head) 
    { 
     delete(head->next); 
     free(head); 
     *head=NULL; 
    } 
} 

при компиляции я получил сообщение об ошибке: запрос на члена next в чем-то не структуры или объединения.
Структура

typedef struct node{ 
    int data; 
    struct node *next; 
}; 
+2

Удален [C++] тег. Это не может быть вопросом C++. 'delete' - это ключевое слово в C++. – AnT

+1

Будьте осторожны с рекурсией - очень длинный список может привести к переполнению стека. Вместо этого я использовал бы цикл. –

ответ

4

head представляет собой указатель на указатель на LIST. Вам нужно разыменовать это - *head - чтобы получить LIST* работать на

void delete(LIST **head) 
{ 
    if(*head) 
    { 
     delete(&(*head)->next); 
     free(*head); 
     *head=NULL; 
    } 
} 
+0

Я внес изменения в свою программу в соответствии с вашими предложениями, и она работает. Но когда я пытаюсь выполнить, он заканчивается ошибкой с ошибкой сегментации (ядро сбрасывается). Я не могу понять. Можете ли вы помочь мне разобраться в этом. –

+0

Функция 'delete' верна, поэтому проблема может возникнуть в коде, который вы не опубликовали. Можете ли вы создать [sscce] (http://sscce.org/), который демонстрирует крах и опубликовать его как часть нового вопроса? – simonc

Смежные вопросы