Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — Quadrix 2025

ProgramaçãoLinguagens de programação
Código
qg603280
Banca
Quadrix
Órgão
SEDF
Ano
2025
Nível
Superior
Cargo
Professor de Educação Básica: Eletrônica
A respeito dos tópicos de computação, nas linguagens de programação e nos sistemas operacionais Linux, julgue o item a seguir.A seguinte função em linguagem C sempre causará um vazamento de memória, independentemente de como seja chamada:void func() {int *ptr = malloc(10 * sizeof(int));}
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Vazamento de memória em C: alocação dinâmica sem liberação

Gabarito: ✅ CERTO. A função func() aloca memória com malloc e nunca a libera com free, o que caracteriza um vazamento de memória (memory leak) — e isso ocorre independentemente de como a função é chamada, pois o ponteiro ptr é uma variável local que se perde ao final da execução da função, sem que o bloco alocado seja liberado.

O vazamento de memória é um dos problemas mais clássicos em linguagens com gerenciamento manual de memória, como C. Quando usamos malloc, calloc ou realloc, o programa solicita ao sistema operacional um bloco de memória no heap. Esse bloco permanece alocado até que seja explicitamente liberado com free(), ou até o término do programa. Se o programador perde a referência para esse bloco — por exemplo, quando o ponteiro sai de escopo — não há mais como liberá-lo, e a memória fica "presa" durante toda a execução do programa.

No código da questão, a função func() declara um ponteiro local ptr, atribui a ele o endereço de um bloco de 10 inteiros alocado no heap, e termina sem chamar free(ptr). Ao retornar, a variável ptr é destruída (sai do escopo), mas o bloco de memória alocado continua existindo no heap, agora sem nenhuma referência acessível. Esse é exatamente o cenário de um memory leak: memória alocada e nunca liberada.

A afirmação "independentemente de como seja chamada" é correta porque, mesmo que a função seja chamada uma única vez, o vazamento ocorre. Não há nenhuma forma de chamar essa função que evite o vazamento, pois a função não retorna o ponteiro, não o armazena em uma variável global, e não o libera. O ponteiro é estritamente local e a memória alocada fica órfã.

É importante distinguir o vazamento de memória de outros problemas relacionados, como o uso de ponteiro pendente (dangling pointer) ou o estouro de buffer. O vazamento é um problema de gerenciamento de recursos: a memória é alocada, mas não é devolvida ao sistema. Em programas de longa duração, vazamentos acumulados podem levar ao esgotamento da memória disponível e à falha do programa.

A pegadinha que a banca explora aqui é a tentação de pensar que, como a função é pequena e o ponteiro é local, a memória seria automaticamente liberada. Em linguagens com garbage collector (como Java, Python ou C#), isso seria verdade, mas em C o gerenciamento é manual: a memória alocada com malloc só é liberada com free, e a saída de escopo do ponteiro não libera o bloco alocado.

  1. 1malloc aloca no heap
  2. 2ptr sai do escopo
  3. 3Sem free → memória órfã
  4. 4Vazamento (memory leak)
LEVEL · soulevel.com.br
NÃO CAIA NESSA!

A banca explora a confusão entre o escopo da variável ponteiro e o ciclo de vida do bloco de memória alocado. O candidato pode pensar que, como ptr é local, a memória é liberada automaticamente ao final da função — mas isso só ocorreria em linguagens com coleta de lixo. Em C, o bloco alocado com malloc permanece no heap até que free() seja chamado ou o programa termine. A variável ptr é destruída, mas a memória alocada continua lá, sem referência — o vazamento.

PEGA ESSA DICA!

Para identificar vazamentos de memória em C, procure por chamadas a malloc, calloc ou realloc e verifique se há uma chamada correspondente a free para cada uma delas. Se o ponteiro alocado não for liberado e não for retornado ou armazenado em uma variável de escopo mais amplo, há um vazamento. Em questões de prova, a presença de malloc sem free é um forte indicativo de memory leak.

Gabarito: ✅ CERTO

Link permanente: /questoes/qg603280