Будет ли утечка памяти? - C (СИ)
Формулировка задачи:
Есть такая функция:
В main я ее вызываю следующим образом:
В этой функции присутствует следующее действие:
Вопрос:
Происходит ли у меня утечка памяти ?
struct Item* addItem(struct Item *,int*);
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; }
Объяснение кода листинга программы
- В функции
resize
выполняется перераспределение памяти под массив структурItem
с новым размеромnewSize
. - Если
realloc
вернулNULL
(что означает ошибку), то функцияresize
возвращает-1
, иначе возвращает0
. - В функции
main
указательarray
инициализируется какNULL
. - Затем, после некоторых действий, переменной
size
присваивается некоторое естественное число. - Вызывается функция
resize
, в которую передается указательarray
и размерsize
. - Если
resize
вернула0
, то выполняется некоторый код. - Если
resize
вернула-1
, то выводится сообщение об ошибкеMEMORY
, и выполняются некоторые действия. - После некоторого кода функция
main
возвращает0
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д