Questão de Programação — Linguagens de programação — Quadrix 2025
- Código
- qg594698
- Banca
- Quadrix
- Órgão
- CFBio
- Ano
- 2025
- Nível
- Superior
- Cargo
- Analista de Desenvolvimento
- CCerto
- EErrado
GabaritoC — Certo
Gabarito: C — CERTO. A função malloc() é, de fato, uma função da biblioteca padrão da linguagem C, herdada pelo C++, utilizada para realizar a alocação dinâmica de memória em tempo de execução. A afirmação está correta, pois malloc() aloca um bloco de memória contíguo do tamanho especificado em bytes e retorna um ponteiro para o início desse bloco.
A alocação dinâmica de memória é um conceito fundamental em linguagens de programação de baixo nível, como C e C++. Diferentemente da alocação estática, que ocorre em tempo de compilação e tem tamanho fixo, a alocação dinâmica permite que o programa solicite memória durante sua execução, conforme a necessidade. Isso é essencial para estruturas de dados que crescem ou diminuem dinamicamente, como listas encadeadas, árvores e vetores de tamanho variável.
Em C, a alocação dinâmica é feita principalmente pelas funções malloc(), calloc(), realloc() e free(), todas declaradas no cabeçalho <stdlib.h>. A função malloc() recebe como argumento o número de bytes a serem alocados e retorna um ponteiro do tipo void*, que deve ser convertido para o tipo de ponteiro desejado. Por exemplo, para alocar um vetor de 10 inteiros, o programador escreveria:
int *vetor = (int*) malloc(10 * sizeof(int));O C++ herdou essas funções da linguagem C, mas também introduziu operadores próprios para alocação dinâmica: new e delete. O operador new aloca memória e chama o construtor da classe, enquanto delete libera a memória e chama o destrutor. Essa é uma diferença crucial: malloc() apenas reserva memória bruta, sem inicializar o objeto, enquanto new inicializa o objeto adequadamente.
A distinção entre malloc() e new é um ponto clássico de cobrança em provas. Enquanto malloc() é uma função que retorna void* e não chama construtores, new é um operador que retorna o tipo correto e chama o construtor. Além disso, malloc() deve ser liberada com free(), enquanto new deve ser liberado com delete. Usar free() em memória alocada com new, ou vice-versa, é um erro grave que pode causar corrupção de memória.
A pegadinha que a banca poderia explorar é a confusão entre malloc() e new, ou a ideia de que malloc() é exclusiva do C e não existe no C++. Na verdade, malloc() é uma função da biblioteca padrão do C que também está disponível no C++ por compatibilidade, embora o uso de new seja recomendado em código C++ moderno.
Guarde a fronteira entre malloc()/free() (funções da biblioteca C, alocam memória bruta) e new/delete (operadores do C++, alocam e inicializam objetos): é exatamente nela que as questões sobre alocação dinâmica em C++ se dividem.
A afirmação "Em C++, malloc() é uma função que serve fazer a alocação dinâmica de memória" está correta. A função malloc() é uma função da biblioteca padrão do C, herdada pelo C++, que aloca um bloco de memória contíguo do tamanho especificado em bytes e retorna um ponteiro para o início desse bloco. Ela é uma das principais funções de alocação dinâmica de memória, juntamente com calloc(), realloc() e free(). Embora o C++ ofereça o operador new como alternativa mais segura e orientada a objetos, malloc() continua disponível e funcional na linguagem.
Gabarito: C — CERTO.
Link permanente: /questoes/qg594698