Você está em: Início > Artigos > Desenvolvimento > Linguagem C > Linguagem C Alocação Dinâmica Realloc
Olá! Caro leitor, este artigo é voltado para quem está iniciando na programação utilizando a Linguagem C, neste artigo você irá aprender sobre Alocação Dinâmica Realloc.
A alocação dinâmica de memória é uma técnica poderosa na linguagem C que permite alocar memória em tempo de execução.
Além das funções malloc() e calloc(), a linguagem C também fornece a função realloc() para redimensionar blocos de memória previamente alocados.
Essa função é especialmente útil quando você precisa ajustar o tamanho de uma área de memória durante a execução do programa.
A função realloc()
A função realloc() é usada para redimensionar um bloco de memória previamente alocado.
Ela recebe dois argumentos: um ponteiro para o bloco de memória a ser redimensionado e o novo tamanho desejado em bytes.
A função retorna um ponteiro para o bloco de memória redimensionado ou NULL em caso de falha na alocação.
A sintaxe da função realloc() é a seguinte:
void* realloc(void* ptr, size_t size);
O parâmetro ptr é o ponteiro para o bloco de memória previamente alocado que você deseja redimensionar.
Se ptr for NULL, a função realloc() comporta-se como a função malloc() e simplesmente aloca um novo bloco de memória com o tamanho especificado.
O parâmetro size é o novo tamanho desejado para o bloco de memória em bytes.
Exemplo de uso do realloc()
Aqui está um exemplo simples que demonstra o uso da função realloc():
#include <stdio.h>
#include <stdlib.h>
int main() {
int* numeros = malloc(5 * sizeof(int)); // Aloca um bloco de memória para 5 inteiros
// Verifica se a alocação foi bem-sucedida
if (numeros == NULL) {
printf("Erro na alocação de memória.");
return 1;
}
// Redimensiona o bloco de memória para 10 inteiros
int* numeros_redimensionados = realloc(numeros, 10 * sizeof(int));
// Verifica se a realocação foi bem-sucedida
if (numeros_redimensionados == NULL) {
printf("Erro na realocação de memória.");
return 1;
}
// Atualiza o ponteiro para o bloco de memória redimensionado
numeros = numeros_redimensionados;
// Agora o bloco de memória pode armazenar 10 inteiros
// Libera a memória alocada
free(numeros);
return 0;
}
Neste exemplo, começamos alocando um bloco de memória para armazenar 5 inteiros usando a função malloc().
Em seguida, verificamos se a alocação foi bem-sucedida.
Em seguida, usamos a função realloc() para redimensionar o bloco de memória para armazenar 10 inteiros.
Novamente, verificamos se a realocação foi bem-sucedida e atualizamos o ponteiro numeros para apontar para o bloco de memória redimensionado.
Por fim, liberamos a memória alocada usando a função free().
Considerações
Verifique se o ponteiro retornado por realloc() é diferente de NULL: Ao chamar a função realloc(), é essencial verificar se o ponteiro retornado é diferente de NULL.
Se realloc() falhar em redimensionar o bloco de memória, ela retornará NULL. Nesse caso, você deve lidar com o erro de alocação de memória adequadamente.
O ponteiro original pode não mais ser válido: Após chamar realloc(), o ponteiro original para o bloco de memória pode não ser mais válido.
Portanto, é importante atribuir o ponteiro retornado por realloc() ao ponteiro original para evitar vazamentos de memória ou acesso inválido à memória desalocada.
A realocação pode falhar: Embora a função realloc() seja usada para redimensionar um bloco de memória, pode haver casos em que a realocação falha devido à falta de memória disponível.
Portanto, é importante verificar o valor de retorno de realloc() e lidar com falhas de alocação de memória adequadamente.
A realocação pode ser um processo lento: A realocação de um bloco de memória pode ser um processo lento, pois pode envolver a cópia de dados existentes para um novo local de memória.
Portanto, é recomendável usar a realocação com cuidado e evitá-la quando possível, dimensionando inicialmente o bloco de memória adequadamente.
Libere a memória adequadamente: Após usar a função realloc() para redimensionar um bloco de memória, lembre-se de liberar a memória alocada usando a função free() quando ela não for mais necessária.
Isso é importante para evitar vazamentos de memória.
Ao usar a função realloc(), certifique-se de entender seu comportamento e suas considerações para garantir o gerenciamento adequado da memória alocada dinamicamente.
Conclusão
A alocação dinâmica de memória usando a função realloc() é uma técnica poderosa para ajustar o tamanho de um bloco de memória durante a execução de um programa em C.
Ela permite que você redimensione um bloco de memória previamente alocado para atender às necessidades do seu programa.
No entanto, é importante entender suas considerações e lidar adequadamente com erros de alocação de memória.
Com o uso adequado da função realloc(), você pode criar programas mais flexíveis e eficientes em termos de memória em C.
Você pode seguir seus estudos pegando um material em meu github clique aqui!