Zachowanie niezdefiniowane (undefined behavior)
Kod w C/C++, którego zachowanie nie jest określone — kompilator może zrobić cokolwiek, łącznie z usunięciem tego kodu.
Klasyka gatunku: przepełnienie liczby całkowitej ze znakiem, dzielenie przez 0, użycie pamięci po zwolnieniu, odczyt niezainicjalizowanej pamięci. Kompilator optymalizuje przy założeniu, że „UB się nie zdarza”, więc zwykły błąd zamienia się w lukę bezpieczeństwa. W testach wyłapują je sanitizery (ASAN, UBSAN). Rust eliminuje większość UB już samą konstrukcją języka.