exponenta event banner

Просмотр и исправление недопустимого использования стандартных стандартных проверок библиотеки

Выполните один или несколько из этих шагов до тех пор, пока не будет определено исправление для проверки Неверное использование стандартной библиотеки. Описание проверки и примеры кода см. в разделе Invalid use of standard library routine.

Иногда, особенно для оранжевой проверки, можно определить, что проверка представляет собой не реальную ошибку, а предположение Polyspace ®, которое не соответствует вашему коду. Если для смягчения предположения можно использовать опцию анализа, повторно запустите проверку с помощью этой опции. В противном случае в результат или код можно добавить комментарий и обоснование.

Общий рабочий процесс, применяемый ко всем проверкам, см. в разделе Интерпретация результатов проверки кода в пользовательском интерфейсе Polyspace Desktop.

Шаг 1: Интерпретировать информацию о проверке

Выберите флажок на панели Список результатов (Results List). Просмотрите дополнительные сведения о проверке на панели Сведения о результатах. Проверка имеет красный или оранжевый цвет из-за недопустимых аргументов функции.

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

ФункцияПричина проверки красного или оранжевого цвета
islower, isdigitи другие функции обработки символов в ctype.h

Значение аргумента может находиться за пределами диапазона, допустимого для unsigned char переменная.

Обратите внимание, что можно использовать макрос EOF в качестве аргумента.

Функции в math.h

Программное обеспечение последовательно проверяет наличие нескольких видов ошибок. Программное обеспечение выполняет каждую проверку только для тех путей выполнения, по которым проходит предыдущая проверка.

Ниже приводятся некоторые примеры. Дополнительные сведения и список функций см. в разделе Недопустимое использование стандартных библиотечных подпрограмм с плавающей запятой.

sqrtЗначение аргумента может быть отрицательным.
powПервый аргумент может быть отрицательным, в то время как второй аргумент не является целым числом.
exp, exp2или гиперболические функцииАргумент может быть настолько велик, что результат превышает допустимое значение double.
logАргумент может быть нулевым или отрицательным.
asin или acosАргумент может находиться за пределами диапазона [-1,1].
tanАргумент может иметь значение HALF_PI.
acoshАргумент может быть меньше 1.
atanhАргумент может быть больше 1 или меньше -1.
fprintf, fscanfи другие функции обработки файловАргумент указателя файла может быть нечитаемым. Например, это может быть NULL.
Функции, принимающие строковые аргументыАргумент строки может быть недопустимой строкой. Например, он не заканчивается завершающим '\0'.
memmove или memcpy Третий аргумент этой функции указывает количество байтов для копирования из второго в первый аргумент. Это число может превышать объем памяти, выделенный первому или второму аргументу.

Шаг 2: Проверка трассировки в соответствии с предположением Polyspace

Проверьте, можно ли отследить оранжевый чек по предположению Polyspace, которое встречается ранее в коде. Если предположение не соответствует действительности в вашем случае, добавьте комментарий или обоснование в результат или код. См. раздел Результаты анализа пространства адресов с помощью исправлений ошибок или обоснований.

Например, вы получаете значение из неопределенной функции и выполняете sqrt операция на нем. Затем:

  1. Polyspace предполагает, что функция может возвращать отрицательное значение.

  2. Поэтому программное обеспечение производит оранжевую проверку недопустимого использования стандартной библиотечной подпрограммы на sqrt вызов функции.

  3. Если известно, что функция возвращает положительное значение, во избежание оранжевого можно задать ограничение на возвращаемое значение функции. См. раздел Допущения о упорных функциях. В качестве альтернативы добавьте комментарий и обоснование, описывающие, почему вы не изменили код.

Дополнительные сведения см. в разделе Допущения анализа проверки кода.