Выполните один или несколько из этих шагов, пока не определите исправление для проверки состояния корректности. Существует несколько способов исправить красный или оранжевый чек. Описание проверки и примеры кода см. в разделе Correctness condition.
Иногда, особенно для оранжевой проверки, можно определить, что проверка представляет собой не реальную ошибку, а предположение Polyspace ®, которое не соответствует вашему коду. Если для смягчения предположения можно использовать опцию анализа, повторно запустите проверку с помощью этой опции. В противном случае в результат или код можно добавить комментарий и обоснование.
Общий рабочий процесс, применяемый ко всем проверкам, см. в разделе Интерпретация результатов проверки кода в пользовательском интерфейсе Polyspace Desktop.
На панели Список результатов (Results List) выберите флажок. Просмотрите причину проверки на панели Сведения о результате (Result Details). В следующем списке показаны некоторые из возможных причин:
Массив преобразуется в другой массив большего размера.
В следующем примере красная проверка выполняется, поскольку массив преобразуется в другой массив большего размера.
![]()
При отмене ссылки указатель функции имеет значение NULL.
В следующем примере красная проверка выполняется, поскольку при отмене ссылки указатель функции имеет значение NULL.

При отмене ссылки указатель функции не указывает на функцию.
В следующем примере выполняется проверка оранжевого цвета, поскольку Polyspace не может определить, указывает ли указатель функции на функцию при отмене ссылки. Такая ситуация может возникнуть, например, при назначении абсолютного адреса указателю функции.

Указатель функции указывает на функцию, но типы аргументов указателя и функции не совпадают. Например:
typedef int (*typeFuncPtr) (complex*); int func(int* x); . . typeFuncPtr funcPtr = &func;
В следующем примере красная проверка выполняется по следующей причине:
Указатель функции указывает на функцию func.
func ожидает аргумент типа int, но соответствующий аргумент указателя функции является структурой.

Указатель функции указывает на функцию, но номера аргументов указателя и функции не совпадают. Например:
typedef int (*typeFuncPtr) (int, int); int func(int); . . typeFuncPtr funcPtr = &func;.
В следующем примере красная проверка выполняется по следующей причине:
Указатель функции указывает на функцию func.
func ожидает один аргумент, но указатель функции имеет два аргумента.

Указатель функции указывает на функцию, но возвращаемые типы указателя и функции не совпадают. Например:
typedef double (*typeFuncPtr) (int); int func(int); . . typeFuncPtr funcPtr = &func;
В следующем примере красная проверка выполняется по следующей причине:
Указатель функции указывает на функцию func.
func возвращает int значение, но возвращаемый тип указателя функции double.

Значение переменной выходит за пределы диапазона, заданного в режиме глобального подтверждения. См. раздел Ограничение диапазона глобальных переменных.
В следующем примере красная проверка выполняется по следующей причине:
Для переменной задается диапазон 0... 10glob.
Значение переменной выходит за пределы этого диапазона.
![]()
На основе информации проверки на панели Сведения о результате (Result Details) выполните дальнейшие действия для определения первопричины. В интерфейсе пользователя Polyspace можно выполнить только следующие действия.
| Проверить информацию | Определение первопричины |
|---|---|
Массив преобразуется в другой массив большего размера. |
|
Проблемы при отмене ссылки на указатель функции:
|
|
Значение переменной выходит за пределы диапазона, заданного в режиме глобального подтверждения. | Просмотрите все предыдущие экземпляры глобальной переменной. Определите точку, подходящую для ограничения переменной.
|
Проверьте, можно ли отследить оранжевый чек по предположению Polyspace, которое встречается ранее в коде. Если предположение не соответствует действительности в вашем случае, добавьте комментарий или обоснование в результат или код. См. раздел Результаты анализа пространства адресов с помощью исправлений ошибок или обоснований.