Relação Malloc e Realloc, Como ele lida quando o espaço requerido não está disponível na memória [duplicado]
Duplicata Possível:
funções realloc e malloc
#include<stdio.h>
#include<stdlib.h>
void main()
{
int *p;
p = malloc(6);
p = realloc(p, 10);
if (p == NULL)
{
printf("error"); // when does p point to null consider i have enough space in prgrm
//memory area but not in memory where realloc is trying to search
//for the memory, I dont know how to explain that try to undrstnd
exit(1);
}
}
Tome este exemplo para o código, suponha que a memória total é de 10 bytes e 2 bytes é usado pela declaração de ponteiro para digitar int e ohter 6 bytes por função malloc os 2 bytes restantes são ocupados por outros programas, agora quando eu executo função realloc para estender a memória para a qual o ponteiro está apontando, ele procurará 10 bytes na memória e, quando não estiver disponível, aloca 10 bytes de memória da área de heap e copia o conteúdo do malloc e o cola na nova área de memória alocada na área de heap. então apague a memória armazenada no malloc certo?
O realloc () retorna um ponteiro NULL porque a memória não está disponível? Não está certo! Ele vai para a área de heap para a alocação de memória, certo? Não retorna um ponteiro NULL certo?
Ouça-me: | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 |
considere isso como blocos de memória: suponha que 01 a 06 foi usado por malloc () func, 07 e 08 são livres e os últimos 2 blocos i, e 09 e 10 estão sendo usados pela memória de outros programas. Agora, quando eu chamo realloc (p, 10) eu preciso de 10 bytes, mas há apenas 2 bytes livres, então o que o realloc faz? Retorna um ponteiro NULL ou aloca memória forma a área de heap e copia o conteúdo de 01 a 06 blocos de memória para essa memória na área de heap, por favor me avise.