Я не могу использовать двойной указатель в аргументах функции ft_lstdel.
В любом случае можно установить значение NULL в списке
Нет, нет. Не изнутри вашей ft_lstdel()
функции. Если вы хотите изменить значение l
изнутри ft_lstdel()
, единственный способ - передать на него указатель. Кроме этого, вы могли бы установить его на NULL
внутри main()
после вызова ft_lstdel()
.
То, что вы в настоящее время делаете, неправильно, вы не можете просто наложить t_list *
наt_list **
и ожидайте, что это сработает. Вы также делаете много ненужных операций с указателями. OP отредактировал вопрос.
Вы также не освобождаете весь список. В общем случае вам потребуется цикл, который сканирует все элементы next
списка и освобождает весь список, в то время как вы освобождаете только один элемент.
Удаление ненужного, единственноеваша функция должна сделать следующее:
void ft_lstdel(t_list *lst, void (*del)(void *))
{
del(lst->content);
free(lst);
}
Обратите внимание, что это все еще не нормально, поскольку вы освобождаете только один элемент, когда вы должны освободить всех из них.
И если вы хотите установить l
на NULL
, то у вас есть для передачи указателя на него. Другого пути нет .
void ft_lstdel(t_list **lst_ptr, void (*del)(void *))
{
t_list *lst = *lst_ptr;
del(lst->content);
free(lst);
*lst_ptr = NULL;
}