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

Выполните один или несколько из следующих шагов до тех пор, пока вы не определите исправление для проверки Invalid use of standard library routine. Для получения описания примеров проверки и кода смотрите Invalid use of standard library routine.

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

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

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

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

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

ФункцияПричина проверки красного или оранжевого цвета
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, которое происходит ранее в коде. Если предположение не имеет значения true в вашем случае, добавьте комментарий или обоснование в свой результат или код. Смотрите Адрес Результаты Polyspace через исправления ошибок или обоснования.

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

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

  2. Поэтому программное обеспечение производит оранжевую проверку Invalid Use of Standard Library Routine на sqrt вызов функции.

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

Для получения дополнительной информации смотрите Допущения анализа Code Prover.