ExpertiDict

C++ · Intermediário · Português · Técnico

comportamento indefinido

kõpoɾtaˈmẽtu ĩdefiˈnidulocução nominal

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: UB

Exemplos

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

Veja também

Todos os termos de C++