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)?

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 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 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.

Exercícios relacionados