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