A minha duvida é quando usamos a funcao realloc para aumentar um espaço alocado pela função malloc, e ela muda a posição na memória reservada ( por não ter espaço o suficiente), o espaço antigo reservado é liberado pela função realloc? Escrevi o seguinte programa para poderem entender melhor minha dúvida.
#include <stdio.h>
#include <stdlib.h>
int main() {
printf(" tamanho de int: %d \n",sizeof(int)); // int tem 4 bytes
int *p1;
int *p2;
p1 = ( int * ) malloc( 10 * sizeof(int)); // aqui o programa está reservando um espaço na memória com o tamanho de 10 inteiros,
// ou seja 40 bytes, e está salvando a primeira posicao desse espaço (vetor) para o ponteiro p1. Certo?
p2 = p1; // aqui eu estou salvando a primeira posicao do vetor alocado acima, no ponteiro p2
p1 = ( int * ) realloc( p1 , 100 ); // aqui estou realocando o vetor declarado pelo malloc, e transformando ele num vetor com 100 posições ( 400 bytes)
// e estou dando o valor da primeira posicao do vetor para o ponteiro p1. Certo?
// agora vem a duvida principal, digamos que na posição da memoria aonde p1 apontava antes do realloc nao houvesse espaco para um vetor de 48 bytes,
// isso faria com que outro pedaco da memoria fosse reservado para armazenar o vetor, certo?
// porém p2 ainda aponta para o antigo espaco de memoria reservado, aonde estava o vetor de tamanho 10.
//Minha duvida e se a funcao realloc libera esse antigo espaco, então qualquer variavel declarada depois do realloc poderia ir parar la
// ou se esse espaco continua reservado, e entao seria necessario usar libera-lo mais tarde.
// resumindo, a funcao realloc libera o espaco antigo reservado na memoria ou nao?
free(p1);
free(p2);
return 0;
}
// agradeço muito a quem puder me ajudar!