Есть только две функции, которые выделяют память, которую необходимо освободить.
Функция newEmployee
создает строку с strdup
, которая должна быть освобождена, а такжеTEMPLOYEE
сам объект.
Другая функция, которая выделяет память, - cloneList
, однако она только клонирует список.Если мы можем сначала выяснить, как правильно освободить один список, нам нужно только убедиться, что мы освободили все клонированные списки, а также чтобы освободить память, выделенную в cloneList
.
Чтобы правильно освободить список, мынеобходимо освободить каждый TEMPLOYEE
объект и m_Name
, который он содержит.Вашу функцию свободного списка можно изменить следующим образом:
void freeList(TEMPLOYEE * src)
{
TEMPLOYEE *next = src;
while (next != NULL) {
TEMPLOYEE *prev = next;
next = prev->m_Next;
free(prev->m_Name);
free(prev);
}
}
Пока вы вызываете это для всех списков, включая созданные cloneList
, вся память должна быть освобождена.