Перераспределение памяти - 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) ...