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