Ответ эксперта

Программа работала годами и вдруг отказала — чья это ошибка?

Вопрос по направлению: Экспертиза исходного кода на C++

Ответ

Это особенность языка, и в спорах о качестве она объясняет больше всего. Правила C++ описывают не все ситуации: часть ошибок — обращение к освобождённой памяти, выход за границы массива, переполнение при вычислениях со знаковыми целыми — не приводит к немедленной остановке, потому что стандарт не определяет последствия.

На практике программа с такой ошибкой может годами работать правильно, а затем отказать после смены версии компилятора, изменения настроек оптимизации или другого объёма данных. В коде при этом ничего не меняли. Значит, вот что: «программа работала три года» не доказывает правильности, а отказ после обновления окружения не означает, что дефект внёс тот, кто обновлял.

Что может эксперт: установить, есть ли в коде ошибка такого класса — в том числе санитайзерами GCC и Clang или анализатором Valgrind, — и связан ли с ней отказ. Чего он не делает: не распределяет вину между сторонами, это решает суд.

Актуализировано
Обсудить задачу

Нужна экспертиза или консультация?

Опишите ситуацию и цель обращения. Мы определим нужный вид исследования, подберём профильного эксперта и поможем подготовить вопросы и материалы.

  • Подберём специалиста
  • Поможем с вопросами
  • Оценим срок и стоимость
Оценить материалы или позвоните 8 (800) 333-24-09 Бесплатный звонок по России