Перераспределение памяти - C (СИ)
Формулировка задачи:
Здравствуйте. Если писать такой код
в указанном месте произойдет утечка памяти?
Например если realloc вернет мне NULL тогда p=NULL, и, как я думаю, этот участок памяти потеряется.
Если переписать код так
то в таком случае программа падает. Так как же мне поступить, чтобы не было утечек памяти.
И еще вопрос. Если при перераспределении памяти адрес изменится, то что произойдет со старым адресом, она освобождается или его нужно освободить?
#include <stdio.h> #include <stdlib.h> int main() { int *p = NULL, count = 0; do { p = realloc(p, (++count)*sizeof(int));//в этом месте if(p!=NULL) { scanf("%d", &p[count-1]); for(int i = 0; i<count; i++) printf("%d ", p[i]); //count++; } } while(p[count-1]!=-1); return 0; }
#include <stdio.h> #include <stdlib.h> int main() { int *p = NULL, *t=NULL, count = 0; do { t = realloc(p, (++count)*sizeof(int)); if(t!=NULL) { free(p);//здесь если перераспределение памяти произошло, без изменения адреса, то освобождается нужные при работе данные, наверное, поэтому данный код не работает. p=t; t=NULL; scanf("%d", &p[count-1]); for(int i = 0; i<count; i++) printf("%d ", p[i]); //count++; } } while(p[count-1]!=-1); return 0; }
Решение задачи: «Перераспределение памяти»
textual
Листинг программы
if (t!=p) ...
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д