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