Sobre o conceito de Alocação de Memória Dinâmica, responda:
2. Quais são as principais funções da <stdlib.h> usadas para alocação dinâmica e qual o propósito de cada uma (malloc, calloc, realloc e free)?
2. Quais são as principais funções da <stdlib.h> usadas para alocação dinâmica e qual o propósito de cada uma (malloc, calloc, realloc e free)?
Passo 1
O enunciado quer que a gente explique o conceito de alocação de memória dinâmica em C, listando as principais funções definidas em
<stdlib.h> e dizendo qual o propósito de cada uma. Vamos precisar apresentar malloc, calloc, realloc e free, descrevendo como e quando usar cada uma.Passo 2
A função
A função
A função
malloc (memory allocate) reserva um bloco contíguo de memória de um dado número de bytes e retorna um ponteiro para o início desse bloco. Essa memória fica com conteúdo indefinido (lixo) e, em caso de falha (memória insuficiente), malloc retorna NULL. Use malloc sempre que precisar de um buffer bruto de tamanho conhecido em bytes.A função
calloc (contiguous allocate) também reserva memória, mas recebe dois parâmetros: número de elementos e tamanho de cada elemento. Além de alocar, ela inicializa todos os bytes a zero. Em caso de falha, retorna NULL. Use calloc quando precisar de um array já zerado, evitando fazer manualmente o loop de inicialização.A função
realloc (re-allocate) ajusta o tamanho de um bloco já alocado (via malloc ou calloc). Você passa o ponteiro antigo e o novo tamanho em bytes. Se houver espaço para expandir no mesmo local, a área é ajustada; caso contrário, realloc aloca um novo bloco, copia os dados até o mínimo entre o tamanho antigo e o novo, libera o bloco antigo e retorna o ponteiro para o novo. Em caso de erro, retorna NULL e preserva o bloco original.Passo 3
A função
free libera um bloco de memória previamente alocado por malloc, calloc ou realloc. Você passa o ponteiro para o início do bloco; depois disso, aquele espaço está disponível para futuras alocações. É essencial usar free para evitar vazamentos de memória (memory leaks).Resposta
malloc – aloca um bloco de N bytes sem inicializar (retorna
calloc – aloca um bloco para N elementos de certo tamanho e já zera tudo (retorna
realloc – ajusta o tamanho de um bloco existente, copiando dados e liberando o antigo se precisar mover (retorna
free – libera um bloco alocado, devolvendo a memória ao sistema.
NULL se falhar).calloc – aloca um bloco para N elementos de certo tamanho e já zera tudo (retorna
NULL se falhar).realloc – ajusta o tamanho de um bloco existente, copiando dados e liberando o antigo se precisar mover (retorna
NULL em erro, sem liberar o original).free – libera um bloco alocado, devolvendo a memória ao sistema.