Неопределённое поведение программного обеспечения — ситуация, когда в определённых маргинальных случаях поведение программного продукта или устройства может меняться неконтролируемым образом и приводить к некорректным результатам. 1 При этом это не является ошибкой, и о такой возможности указано в спецификации. 1
Основные причины, по которым может допускаться неопределённое поведение:
- технические ограничения; 1
- оптимизации с целью снижения расходов на производство, эксплуатацию, повышение быстродействия и снижение потребления ресурсов; 1
- возможность нескольких реализаций, например — нескольких разных компиляторов от разных производителей по одной спецификации языка программирования; 1
- кроссплатформенность; 1
- возможность изменения продукта со временем. 1
Примеры неопределённого поведения:
- доступ к элементам массива вне разрешённых границ; 3
- удаление объекта производного класса через delete на указателе, статический тип которого является базовым классом, при отсутствии виртуального деструктора в базовом классе; 3
- многократное изменение переменной или неупорядоченные изменение и независимое чтение при отсутствии порядка вычислений. 3