Как освободить память выделенную в подпрограмме - C (СИ)
Формулировка задачи:
Имеется функция создания элемента списка
DrMemory ругается на утечки памяти при ее вызове
подскажите где нужно написать free(elem); чтобы утечек памяти не было
struct list_int* create_elem(int num, int sqnum)
{
struct list_int *elem = malloc(sizeof(struct list_int));
if (elem)
{
elem->dat.num = num;
elem->dat.sqnum = sqnum;
elem->next = NULL;
}
return elem;
}struct list_int *elem;
//...
while (1)
{
if (fscanf(f,"%d",&tmp)!=1)
break;
elem = create_elem(tmp,(tmp)*(tmp));
if (elem)
{
if (add_elem(&list, elem)==1)
first= list;
}
}
//...Решение задачи: «Как освободить память выделенную в подпрограмме»
textual
Листинг программы
elem = NULL;
while(1) {
if (elem) free(elem);
....
}
Объяснение кода листинга программы
elem— это указатель на выделенную динамически память.- Если
elemне равен NULL, то это означает, что память была успешно выделена и ее можно освободить. - Функция
freeосвобождает память, на которую указывает указательelem. - После вызова функции
freeуказательelemстановится равным NULL. - Процесс повторяется до тех пор, пока не будет выделена новая память или не будет достигнуто условие окончания цикла.