Rust · Avançado · Português · Técnico
comportamento indefinido
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