ExpertiDict

Rust · Avançado · Português · Técnico

comportamento indefinido

/kõ.poʁ.ta.ˈmẽ.tu ĩ.de.fi.ˈni.du/substantivo

Situação em que o programa viola as regras da linguagem, como ler memória inválida ou criar uma referência inválida, e o compilador passa a poder gerar qualquer resultado.

Onde usar

Em Rust seguro não ocorre; só em unsafe. Aparece em reviews que perguntam se um bloco unsafe cumpre suas obrigações.

Em código

let v = vec![1, 2, 3];
let p = v.as_ptr();
// UB: lê além do fim do vetor
// let x = unsafe { *p.add(10) };
let ok = unsafe { *p.add(2) }; // dentro
println!("{ok}");

Exemplos

Esse acesso fora do vetor é comportamento indefinido.

O Miri ajuda a achar comportamento indefinido no unsafe.

Cuidado

Não significa crash: o programa pode parecer funcionar e quebrar só com outra otimização ou outra versão do compilador.

Sinônimos

UB, undefined behavior

Veja também

Todos os termos de Rust