Informática Múltipla Escolha

Na engenharia de software, “Programação Defensiva” é a prática de antecipar falhas. Qual das abordagens a seguir reflete uma prática obrigatória de programação defensiva ao lidar com alocação dinâmica e arquivos em C?

Na engenharia de software, “Programação Defensiva” é a prática de antecipar falhas.

Qual das abordagens a seguir reflete uma prática obrigatória de programação defensiva ao lidar com alocação dinâmica e arquivos em C?

  1. Sempre verificar se o retorno das funções malloc ou fopen é diferente de NULL antes de tentar acessar a memória ou o arquivo.
  2. Declarar todas as variáveis do programa como variáveis globais no topo do arquivo para evitar perda de escopo.
  3. Usar funções recursivas no lugar de laços while sempre que possível para evitar loops infinitos.
  4. Desativar os warnings (avisos) do compilador para evitar que mensagens de erro assustem o usuário final.
  5. Usar apenas int e evitar float para impedir erros de precisão matemática.

Resolução completa

Explicação passo a passo

A
Alternativa A

Análise da Questão sobre Programação Defensiva em C

A questão aborda um conceito fundamental da engenharia de software aplicada à linguagem C: a necessidade de tratar falhas potenciais durante a execução do programa.

Alternativa A

Programação Defensiva consiste em escrever código que seja capaz de lidar com situações imprevistas ou entradas inválidas sem falhar catastróficamente. No contexto da linguagem C, isso é crítico devido ao gerenciamento manual de recursos.

Por que a Alternativa A está correta?

Em C, o programador tem responsabilidade direta sobre a alocação de memória e abertura de arquivos. As funções malloc e fopen podem falhar por diversos motivos (memória insuficiente, arquivo não encontrado, permissão negada).

  • malloc: Se não consegue reservar a memória solicitada, ela retorna NULL. Tentar acessar essa memória gera um erro de segmentação (Segmentation Fault) e o programa trava.
  • fopen: Se não consegue abrir o arquivo, também retorna NULL. Tentar ler ou escrever através desse ponteiro vazio causa comportamento indefinido.

Portanto, a prática obrigatória é validar o retorno dessas funções:

int *ptr = malloc(sizeof(int));
if (ptr == NULL) {
    // Tratar erro: sair, imprimir mensagem, liberar outros recursos
}

Por que as outras alternativas estão incorretas?

AlternativaMotivo do Erro
BVariáveis globais aumentam o acoplamento e dificultam a manutenção; não previnem falhas de alocação.
CRecursividade não substitui loops para controle de fluxo; excesso de chamadas pode causar estouro de pilha (Stack Overflow).
DDesabilitar warnings esconde erros potenciais de compilação; boas práticas exigem corrigir avisos.
ERestringir tipos de dados (int vs float) limita a funcionalidade e não resolve problemas de alocação dinâmica.

Conclusão

A alternativa A descreve exatamente o mecanismo de segurança necessário para garantir que o programa não tente acessar recursos que não foram criados com sucesso, protegendo contra crashes e vazamentos de recursos.

Tem outra questão para resolver?

Resolver agora com IA

Mais questões de Informática

Ver mais Informática resolvidas

Tem outra questão de Informática?

Cole o enunciado, tire uma foto ou descreva o problema — a IA resolve com explicação completa em segundos.