Как освободить память выделенную в подпрограмме - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Имеется функция создания элемента списка
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;
}
DrMemory ругается на утечки памяти при ее вызове
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;
        }
    }
//...
подскажите где нужно написать free(elem); чтобы утечек памяти не было

Решение задачи: «Как освободить память выделенную в подпрограмме»

textual
Листинг программы
elem = NULL;
while(1) {
 if (elem) free(elem);
....
}

Объяснение кода листинга программы

  1. elem — это указатель на выделенную динамически память.
  2. Если elem не равен NULL, то это означает, что память была успешно выделена и ее можно освободить.
  3. Функция free освобождает память, на которую указывает указатель elem.
  4. После вызова функции free указатель elem становится равным NULL.
  5. Процесс повторяется до тех пор, пока не будет выделена новая память или не будет достигнуто условие окончания цикла.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5
Похожие ответы