Ir ao conteúdo

C Realloc libera o espaço antigo reservado na memória?


Ir à solução Resolvido por Ansi C,

Posts recomendados

  • Membro VIP
Postado

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!

  • 3 semanas depois...
  • Solução
Postado
4 minutos atrás, Arthur Vandellay disse:

Um professor de programação me disse que a função realloc libera o espaço de memória antigo.

Sim a função solicita libertação do segmento e atualiza o apontador, se tudo de certo um apontador diferente de 0 e retornado pela função.

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!