Это для школы.
Я работаю над реализацией команды Unix 'ls'. Для этого я использую связанные списки каждый раз, когда читаю каталог (поэтому только один раз, если опция -R не установлена). Для этого я должен использовать функции и узлы связанных списков (или элементы, я не уверен, какое это правильное имя), которые мы должны были кодировать в предыдущем проекте. Эти узлы выглядят так:
typedef struct s_list
{
void *content;
size_t content_size;
struct s_list *next;
}t_list;
В моей программе ls я использую их для хранения для каждого файла в каталоге, который я перечисляю, его имени и статистики, полученных с помощью функции stat (). Таким образом, указатель 'содержимого' моего t_list имеет следующую структуру:
typedef struct s_entry
{
char *filename;
struct stat filestat;
}t_entry;
Все работает нормально, единственная проблема, которую я получил, это то, что Valgrind сказал мне, что есть утечка из-за malloc (), используемой для выделения этих структур t_entry. Итак, я думаю, что я освобождаю их неправильно .. вот как я это делаю:
void free_list(t_list *entries)
{
t_list *n_node;
if (!entries)
return ;
while (entries)
{
n_node = entries->next;
free(entries->content);
free(entries);
entries = n_node;
}
}
Полагаю, недостаточно просто освободить указатель * содержимого, но я попробовал другие способы, и он не будет работать. Если я попытаюсь освободить, как
free(entries->content->filename);
например, это не работает, и тот факт, что содержимое является пустым указателем, кажется, является проблемой в некоторых отношениях, и я пытался решить эту проблему, но именно так мы должны были кодировать эти функции связанного списка.
Если бы кто-нибудь мог дать мне подсказку о том, как правильно освободить эти списки, это было бы здорово, потому что я действительно застрял в этом. Заранее спасибо.
Извините, если мой английский или объяснение недостаточно ясны.
ps: На всякий случай весь проект (далеко не законченный) можно найти здесь:
https://github.com/Zestx/ft_ls