Sobre o conceito de Alocação de Memória Dinâmica, responda:
4. Descreva um cenário em que o uso de realloc seria mais apropriado do que liberar e realocar manualmente um bloco de memória.

Passo 1

O enunciado pede para a gente encontrar um exemplo prático — um cenário concreto — em que usar realloc para redimensionar um bloco de memória é melhor do que fazer manualmente um free seguido de um malloc e copiar os dados à mão. O conteúdo aqui é gerenciamento de memória dinâmica em C.

Passo 2

A função realloc tenta estender ou encolher o bloco original “in place”, preservando os dados já armazenados e atualizando o ponteiro de forma segura. Se não houver espaço contíguo suficiente, ela aloca outro bloco maior, faz a cópia interna e libera o antigo. Assim, evita que você mesmo tenha que chamar malloc para o novo tamanho, copiar byte a byte os dados e depois chamar free no bloco antigo.

Passo 3

Imagine um programa que vai ler um número desconhecido de linhas de texto (ou valores) de um arquivo ou da entrada padrão e armazená-las num vetor dinâmico de strings (ou inteiros). A cada nova linha lida, você não sabe previamente quantas linhas virão, então precisa crescer o vetor.
  • Com realloc, basta fazer
    buffer \(=\) realloc(buffer, \(novo_tamanho\) * sizeof *buffer);
    
    e o conteúdo anterior já fica intacto.
  • Se você fosse liberar e realocar manualmente, teria de fazer algo como:
    . salvar o ponteiro antigo,
    . chamar malloc no novo tamanho,
    . memcpy do bloco antigo para o novo,
    . free do bloco antigo,
    . tratar erros em cada passo.
    Isso gera código mais verboso, mais sujeito a vazamentos e cópias erradas.

Resposta

Um exemplo clássico é uma rotina de leitura dinâmica de linhas de texto ou de registros quando não se sabe quantos itens virão: a cada nova linha lida, você faz
dados \(=\) realloc(dados, quantidade\(+1\) * sizeof *dados);
para ampliar o vetor já preenchido até então. Nesse caso realloc cuida de preservar o conteúdo antigo, possivelmente evita cópia e reduz a chance de erros em comparação com free malloc memcpy manual.

Exercícios relacionados