Alternativa A - malloc().
Análise da Questão
A questão aborda conceitos fundamentais da linguagem de programação C, especificamente o gerenciamento de memória dinâmica. Para responder corretamente, é necessário distinguir as funções da biblioteca padrão <stdlib.h> responsáveis por gerenciar o heap (memória dinâmica).
Conceito de Alocação Dinâmica
A alocação dinâmica permite que o programa reserve espaço na memória durante a execução, e não apenas durante a compilação (como ocorre com variáveis locais ou globais estáticas). Isso é feito através de funções específicas que solicitam blocos de memória ao sistema operacional.
Análise das Funções Listadas
Para identificar a resposta correta, vamos examinar o papel de cada função apresentada nas alternativas:
malloc(size_t size): Significa Memory ALLOCation. É a função padrão e mais utilizada para reservar um bloco contíguo de memória de um determinado tamanho. Ela retorna um ponteiro para o início do bloco ou NULL se falhar.- **
free(void *ptr): Responsável por liberar** memória que foi anteriormente alocada. Ela não aloca memória; ela a devolve ao sistema. calloc(size_t num, size_t size): Aloca memória para um array de num elementos de size bytes cada, mas inicializa todos os bits a zero. Embora seja uma forma de alocação, o foco dela é a inicialização segura de arrays.- **
realloc(void *ptr, size_t new_size): Serve para redimensionar** um bloco de memória já existente. Não é usada para a primeira alocação. alloc(): Esta função não existe na linguagem C padrão. É um distrator comum.
Por que a Alternativa A é a Correta?
Embora calloc também realize uma alocação, a função malloc() é a referência primária para a solicitação de memória bruta. Quando um curso introdutório pergunta sobre "alocar memória dinamicamente" de forma genérica, a intenção é apontar para a função base que faz esse pedido ao sistema.
| Função | Ação Principal | Inicialização |
|---|
malloc() | Aloca novo bloco | Conteúdo indeterminado (lixo) |
calloc() | Aloca novo bloco (array) | Zeros (0) |
realloc() | Redimensiona bloco antigo | Conteúdo preservado (se possível) |
free() | Libera bloco | N/A |
Portanto, a função essencial e direta para a alocação dinâmica é a malloc().
Alternativa A.