C++ · Intermediário · Português · Técnico
comportamento indefinido
Situação em que o padrão não impõe regra alguma ao programa; tudo é permitido, de funcionar a travar. Surge de acesso fora dos limites e overflow com sinal.
Onde usar
O compilador assume que isso nunca acontece e otimiza com base nisso, então o bug pode se manifestar longe da causa ou só com -O2. Sanitizers como ASan e UBSan são a principal defesa.
Em código
int a[3] = {1, 2, 3};
int i = 3;
int x = a[i]; // fora do limite: UB
int m = INT_MAX;
int y = m + 1; // overflow com sinal: UBExemplos
Acessar fora do limite do array é comportamento indefinido, não necessariamente um crash.
O bug sumiu com -O0 e voltou com -O2; cheira a comportamento indefinido.
Cuidado
Não é o mesmo que comportamento não especificado ou definido pela implementação, que têm resultado válido, embora variável.
Sinônimos
undefined behavior, UB