Выполните один или несколько из этих шагов, пока вы не определите фиксацию для проверки Invalid C++ specific operations. Существует несколько способов зафиксировать красную или оранжевую проверку. Для описания проверки и примеров кода, смотрите Invalid C++ specific operations
.
Иногда, специально для оранжевой проверки, можно решить, что проверка не представляет действительную ошибку, но предположение Polyspace®, которое не верно для кода. Если можно использовать аналитическую опцию, чтобы ослабить предположение, повторно выполнить верификацию с помощью той опции. В противном случае можно добавить комментарий и выравнивание в результате или коде.
Для общего рабочего процесса, который применяется ко всем проверкам, смотрите, Интерпретируют Результаты Polyspace Code Prover.
На панели Results List выберите проверку. Панель Result Details отображает дополнительную информацию о проверке.
Вы видите:
Мгновенная причина проверки. Например:
Размер массива не строго положителен.
Например, вы создаете массив с помощью оператора arr = new char [num]
. num
является возможно нулем или отрицательный.
Возможная фиксация: Используйте num
в качестве размера массивов, только если это положительно.
Оператор typeid
разыменовывает возможно указатель NULL
.
Возможная фиксация: Перед использованием оператора typeid
на указателе протестируйте указатель на NULL
.
Оператор dynamic_cast
выполняет недопустимый бросок.
Возможная фиксация: недопустимый бросок приводит к возвращаемому значению NULL
для указателей и исключению std::bad_cast
для ссылок. Старайтесь избегать недопустимого броска. В противном случае, если недопустимый бросок находится на указателях, убедитесь, что вы тестируете возвращаемое значение dynamic_cast
для NULL
, прежде чем разыменуют. Если недопустимый бросок находится на ссылках, убедитесь, что вы отлавливаете исключение std::bad_cast
в try
-catch
оператор.
Вероятная первопричина проверки, если обозначено.
Если вы не можете определить первопричину на основе информации о проверке, используйте ярлыки навигации в пользовательском интерфейсе, чтобы перейти к первопричине.
На основе природы ошибки используйте один из следующих методов, чтобы найти первопричину.
Ошибка | Как найти первопричину |
---|---|
Размер массивов неположителен. |
|
Оператор typeid разыменовывает возможно указатель NULL . |
|
Оператор dynamic_cast выполняет недопустимый бросок. | Перейдите к определениям включенных классов. Определите отношение наследования между классами.
|
Смотрите, можно ли проследить оранжевую проверку до предположения Polyspace, которое происходит ранее в коде. Если предположение не сохраняется в вашем случае, добавьте комментарий или выравнивание в вашем результате или коде. Смотрите Результаты Polyspace Адреса Через Исправления ошибок или Комментарии.
Например, вы получаете переменную размера массивов из заблокированного функционального getSize
. Затем:
Polyspace принимает, что возвращаемое значение getSize
является полным диапазоном. Область значений включает неположительные значения.
Используя переменную, когда размер массивов в динамическом выделении памяти вызывает оранжевый Invalid C++ specific operations.
Если вы знаете, что переменная принимает положительное значение, добавьте комментарий и выравнивание, объясняющее, почему вы не изменили свой код.
Для получения дополнительной информации смотрите Аналитические Предположения Программы автоматического доказательства Кода.
Прежде, чем выровнять по ширине оранжевую проверку, рассмотрите тщательно, можно ли улучшить проект кодирования.