Будет ли утечка памяти? - C (СИ)

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

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

Есть такая функция:
struct Item* addItem(struct Item *,int*);
В main я ее вызываю следующим образом:
table=addItem(table,&n);
В этой функции присутствует следующее действие:
table=realloc(table,sizeof(struct Item)*(*n));
Вопрос: Происходит ли у меня утечка памяти ?

Решение задачи: «Будет ли утечка памяти?»

textual
Листинг программы
#include <stdlib.h>
 
int resize(struct Item ** arrayPtr, size_t newSize) {
    struct Item * tmpPtr = realloc(*arrayPtr, sizeof(structItem) * newSize);
 
    if ( tmpPtr == NULL )
        return -1;
 
    *arrayPtr = tmpPtr;
    return 0;
}
 
/*...*/
 
int main(void) {
    struct Item * array = NULL;
    size_t size;
 
    /*...*/
    size = SOME_NATURAL_NUMBER;
    if ( resize(&array, size) ) {
        perror("MEMORY");
        /* some on-error actions */
    }
 
    /*...*/
 
    return 0;
}

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

  1. В функции resize выполняется перераспределение памяти под массив структур Item с новым размером newSize.
  2. Если realloc вернул NULL (что означает ошибку), то функция resize возвращает -1, иначе возвращает 0.
  3. В функции main указатель array инициализируется как NULL.
  4. Затем, после некоторых действий, переменной size присваивается некоторое естественное число.
  5. Вызывается функция resize, в которую передается указатель array и размер size.
  6. Если resize вернула 0, то выполняется некоторый код.
  7. Если resize вернула -1, то выводится сообщение об ошибке MEMORY, и выполняются некоторые действия.
  8. После некоторого кода функция main возвращает 0.

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


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

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

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