UB — ситуация без требований стандарта: компилятор может делать что угодно, включая поломку соседнего кода на оптимизациях.
Разбор
- Примеры: NULL-deref, OOB, signed overflow, UAF.
- Может «работать» до
-O2.
- ASan/UBSan ловят классы UB.
- Не путать с unspecified/implementation-defined.
Итог
Не опирайтесь на «случайно работает» — UB дыра в контракте языка.