Выполните один или несколько из этих шагов, пока вы не определите фиксацию для проверки Invalid C++ specific operations. Существует несколько способов зафиксировать красную или оранжевую проверку. Для описания проверки и примеров кода, смотрите Invalid C++ specific operations
.
Иногда, особенно для оранжевой проверки, можно решить, что проверка не представляет действительную ошибку, но Polyspace® предположение, которое не верно для вашего кода. Если можно использовать опцию анализа, чтобы ослабить предположение, повторно выполнить верификацию с помощью той опции. В противном случае можно добавить комментарий и выравнивание в результате или коде.
Для общего рабочего процесса, который применяется ко всем проверкам, смотрите, Интерпретируют Результаты Code Prover в Пользовательском интерфейсе Рабочего стола Polyspace или Интерпретируют Результаты Code Prover в Polyspace доступ к веб-интерфейсу.
На панели 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 Адреса Через Исправления ошибок или Выравнивания или Результаты Адреса в Polyspace доступ Через Исправления ошибок или Выравнивания.
Например, вы получаете переменную размера массивов из заблокированного функционального getSize
то:
Polyspace принимает что возвращаемое значение getSize
полный диапазон. Область значений включает неположительные значения.
Используя переменную, когда размер массивов в динамическом выделении памяти вызывает оранжевый Invalid C++ specific operations.
Если вы знаете, что переменная принимает положительное значение, добавьте комментарий и выравнивание, объясняющее, почему вы не изменили свой код.
Для получения дополнительной информации смотрите Аналитические Предположения Code Prover.
Примечание
Прежде, чем выровнять по ширине оранжевую проверку, рассмотрите тщательно, можно ли улучшить проект кодирования.