Função realloc() na biblioteca C: como usar? Sintaxe e exemplo

O que é realloc()?

realloc () é uma função da biblioteca C para adicionar mais tamanho de memória aos blocos de memória já alocados. O objetivo do realloc em C é expandir os blocos de memória atuais, deixando o conteúdo original como está. A função realloc() ajuda a reduzir o tamanho da memória alocada anteriormente pelas funções malloc ou calloc. realloc significa realocação de memória.

Sintaxe para realocação em C

ptr = realloc (ptr,newsize);

A instrução acima aloca um novo espaço de memória com um tamanho especificado na variável newsize. Depois de executar o função, o ponteiro retornará para o primeiro byte do bloco de memória. O novo tamanho pode ser maior ou menor que a memória anterior. Não podemos ter certeza de que o bloco recém-alocado apontará para o mesmo local do bloco de memória anterior. A função realloc em C copiará todos os dados anteriores na nova região. Isso garante que os dados permanecerão seguros.

Por exemplo:

#include <stdio.h>
int main () {
   char *ptr;
   ptr = (char *) malloc(10);
   strcpy(ptr, "Programming");
   printf(" %s,  Address = %u\n", ptr, ptr);

   ptr = (char *) realloc(ptr, 20); //ptr is reallocated with new size
   strcat(ptr, " In 'C'");
   printf(" %s,  Address = %u\n", ptr, ptr);
   free(ptr);
   return 0;
}

Como usar realloc()

O programa abaixo em C demonstra como usar realloc em C para realocar a memória.

#include <stdio.h>
#include <stdlib.h>
    int main() {
        int i, * ptr, sum = 0;
        ptr = malloc(100);
        if (ptr == NULL) {
            printf("Error! memory not allocated.");
            exit(0);
        }
        
        ptr = realloc(ptr,500);
    if(ptr != NULL)
           printf("Memory created successfully\n");
           
    return 0;

    }

Resultado da realocação no exemplo C:

Memory created successfully

Sempre que o realloc resulta em uma operação malsucedida, ele retorna um Ponteiro nulo, e os dados anteriores também são liberados.