Будет ли утечка памяти? - 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.