Удалить связный список и освободить память - 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, чтобы указать, что связный список пуст.