Pular para o conteúdo principal

Questão de Algoritmos e Estrutura de Dados — Estrutura de Dados — NC-UFPR 2019

Algoritmos e Estrutura de DadosEstrutura de Dados
Código
qq535466
Banca
NC-UFPR
Órgão
ITAIPU BINACIONAL
Ano
2019
Nível
Superior
Cargo
Profissional de Nível Universitário Jr - Engenharia Eletrônica
Assinale a alternativa que indica corretamente o que ocorre quando um programador atribui um valor para uma posição além do tamanho do vetor. Por exemplo, suponha que um vetor VET foi definido com 10 posições e o programador tentou fazer a operação VET[15]=1.
  1. AO compilador irá reportar um erro e o executável não será criado.
  2. BO programa pode ser compilado, mas apresenta sempre um erro de execução imediatamente.
  3. CO programa pode ser compilado, mas o compilador previne o problema e elimina a operação incorreta.
  4. DO programa pode ser compilado e a atribuição do valor é realizada na última posição válida do vetor.
  5. EO programa é compilado, mas quando executado pode apresentar resultados imprevistos ou abortar a execução.
Revelar gabarito e comentário

GabaritoE — O programa é compilado, mas quando executado pode apresentar resultados imprevistos ou abortar a execução.

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

Acesso fora dos limites de um vetor (out-of-bounds)

Gabarito: letra E. Quando um programador tenta atribuir um valor a uma posição além do tamanho do vetor (ex.: VET[15] em um vetor de 10 posições), o código é compilado sem erro na maioria das linguagens que não fazem verificação de limites (como C e C++), mas o comportamento em execução é indefinido: pode causar travamento, corromper dados ou até passar despercebido. A alternativa E capta corretamente esse cenário.

A banca testa o conhecimento sobre a ausência de verificação automática de limites em linguagens de baixo/médio nível e a consequente imprevisibilidade.

  1. 1Código compila sem erro
  2. 2Acesso ao endereço calculado
  3. 3Comportamento indefinido
  4. 4Pode abortar ou corromper dados
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Afirma que o compilador reporta erro e não gera executável. Na realidade, compiladores de linguagens como C/C++ não verificam limites de vetor em tempo de compilação (a menos que sejam usadas ferramentas extras de análise estática). Portanto, o executável normalmente é criado.

Alternativa B — ❌ Incorreta

Diz que o programa sempre apresenta erro de execução imediatamente. Embora muitas vezes o programa possa crashar (erro de segmentação), isso não é garantido; o comportamento indefinido pode não produzir falha visível imediata, podendo corromper dados e causar problemas mais tarde.

Alternativa C — ❌ Incorreta

Sugere que o compilador previne o problema e elimina a operação incorreta. Compiladores não removem operações potencialmente perigosas sem aviso (a menos que otimizações específicas, mas não é o padrão). A operação é mantida no código objeto.

Alternativa D — ❌ Incorreta

Propõe que a atribuição é realizada na última posição válida do vetor. Isso seria um comportamento específico de simulação (como em algumas linguagens com verificação que trunca), mas não corresponde ao comportamento real da maioria das linguagens. O acesso é feito no endereço calculado, independentemente dos limites, e pode sobrescrever qualquer área de memória.

Alternativa E — ✅ Correta ⟵ GABARITO

Afirma que o programa é compilado, mas durante a execução pode apresentar resultados imprevistos ou abortar. Isso descreve precisamente o comportamento indefinido (undefined behavior) típico de linguagens como C e C++. O código compila, mas ao executar, a memória adjacente ao vetor pode ser corrompida, levando a crashes ou resultados erráticos. Portanto, é a alternativa que reflete a realidade prática.

Gabarito: letra E.

Link permanente: /questoes/qq535466