Programując w językach C lub C++, bardzo łatwo jest popełnić błąd. Powodów można wymienić kilka. Po pierwsze, oba języki są stosunkowo niskopoziomowe, a więc wymagają ręcznego zarządzania pamięcią dynamiczną, dbania o poprawność wskaźników, jak i dbania o wiele innych aspektów. Po drugie, nie wszystkie zachowania obu języków są w pełni zdefiniowane - standardy C i C++ wskazują zachowania nie zdefiniowane w ogóle (ang. Undefined Behavior, dalej UB), nie zdefiniowane w standardzie, ale definiowane przez konkretne implementacje (ang. Implementation-Defined Behavior), oraz takie, które mogą zostać zaimplementowane na więcej niż jeden sposób, ale niekoniecznie muszą zostać jawnie zdefiniowane w dokumentacji (ang. Unspecified Behavior). Niniejszy artykuł ma na celu przedstawienie czytelnikowi kilku przykładów, w których pomimo iluzorycznej trywialności kodu, znajdują się subtelne błędy lub niejasności.