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.