Удалить связный список и освободить память - C (СИ)
Формулировка задачи:
Вот так создаю связный список
Как мне этот список удалить и освободить память (через mfree).
typedef struct { comp el; void* next; } list; list* first = NULL; /*typedef struct { // Структура описана в другом месте UINT8 x, y, type; WCHAR str[50]; BOOL focus; BOOL chek; } comp;*/ UINT8 k=2; void Add(void)// Добавляет в список новый элемент { list* newlist = (list*) malloc( sizeof(list));//Выделяет память newlist->el.x = k; newlist->next = first; first = newlist; k++; } void GetX(void)// Это для теста { list* current = first; WCHAR buf[32]; UINT8 t=10; while (current) { DrawText(u_ltou(current->el.x, buf), 100, 100+t);// u_ltou - число в строку t=t+10; current = current->next; } } void Dest(void) // Удаление всего списка { //????? }
Решение задачи: «Удалить связный список и освободить память»
textual
Листинг программы
tstk *DelStackAll(tstk *sp) { tstk *spt; int inf; while(sp != NULL) { spt = sp; inf= sp->inf; cout << inf << endl; sp = sp->a; delete spt; } return NULL; }
Объяснение кода листинга программы
- В функции
DelStackAll
передается указатель на вершину связного спискаsp
. - В цикле
while
происходит обход всех элементов связного списка, начиная с вершины. - Каждый элемент связного списка представлен структурой
tstk
, которая содержит указатель на следующий элемент связного спискаa
и информацию об элементеinf
. - В каждой итерации цикла переменная
spt
указывает на текущий элемент связного списка, а переменнаяinf
содержит информацию об этом элементе. - Значение
inf
выводится на экран. - Указатель
sp
обновляется, чтобы указывать на следующий элемент связного списка. - Вызывается функция
delete
для освобождения памяти, выделенной под текущий элемент связного списка. - В конце функции возвращается
NULL
, чтобы указать, что связный список пуст.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д