Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2021, 16:26   #1
Roberttt
Пользователь
 
Регистрация: 30.05.2018
Сообщений: 56
По умолчанию Удаление односвязного списка в СИ

Здравствуйте! Подскажите, пожалуйста, почему при вызове функции "list_destroy()" у меня элементы списка не удаляются, а выводятся в консоль все те, которые были до вызова "list_destroy()". Как они вообще могут выводится, если я с помощью "free()" удаляю переход от одного элемента списка к другому.
Код:
void list_destroy( struct list* list ) {
    while (list) {
        struct list* temporary = list->next;
        free(list);
        list = temporary;
    }
}

void list_print( struct list* l ) {
    for( struct list* list = l; list; list = list->next ) {
        printf("%" PRId64 " ", list->value);
    }
}
Roberttt вне форума Ответить с цитированием
Старый 08.08.2021, 18:48   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

free не разрушает данные в памяти, а возвращает выделенный участок памяти системе. Данные все еще доступны, но работа с ними считается неопределенным поведением и может вызывать ошибки сегментации. После вызова list_destroy нужно занулить переданный указатель или сразу передавать в list_destroy двойной указатель и занулять внутри.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 08.08.2021, 20:52   #3
Roberttt
Пользователь
 
Регистрация: 30.05.2018
Сообщений: 56
По умолчанию

Спасибо за разъяснение
Roberttt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В чем отличие односвязного списка от кольцевого односвязного списка? Yudin Общие вопросы C/C++ 3 08.06.2018 17:07
Удаление элемента по названию из односвязного списка samsandr Помощь студентам 0 28.05.2014 02:16
удаление элемента односвязного списка. язык СИ. всего 5 строчек кода, много времени не займет. MisterTreb Помощь студентам 0 08.01.2013 15:17
Сортировка односвязного списка (C++) biograf Помощь студентам 0 14.12.2010 21:21
Сортировка односвязного списка amerhant Общие вопросы C/C++ 1 13.05.2010 20:25