Invalid use of standard library integer routine

Неправильные аргументы в стандартной функции библиотеки

Описание

Этот дефект возникает, когда вы используете недопустимые аргументы с целочисленной функцией из стандартной библиотеки. Этот дефект подхватывает:

  • Преобразование символов

    toupper, tolower

  • Проверки символов

    isalnum, isalpha, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper, isxdigit

  • Целочисленное деление

    div, ldiv

  • Абсолютные значения

    abs, labs

Зафиксировать

Исправление зависит от первопричины дефекта. Часто детали результата показывают последовательность событий, которые привели к дефекту. Вы можете реализовать исправление на любом событии в последовательности. Если сведения о результате не отображают историю событий, можно отследить их с помощью опций правого щелчка в исходном коде и просмотреть предыдущие связанные события. Смотрите также Результаты интерпретации Bug Finder в интерфейсе пользователя Polyspace Desktop.

См. примеры исправлений ниже.

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

Примеры

расширить все

#include <limits.h>
#include <stdlib.h>

int absoluteValue(void) {

    int neg = INT_MIN;
    return abs(neg);
}

Входное значение для abs является INT_MIN. Абсолютное значение INT_MIN является INT_MAX+1. Это число не может быть представлено типом int.

Коррекция - Изменение входного параметра

Одним из возможных коррекций является изменение значения входа для соответствия возвращаемому типу данных. В этом примере измените значение входа на INT_MIN+1.

#include <limits.h>
#include <stdlib.h>

int absoluteValue(void) {

    int neg = INT_MIN+1;
    return abs(neg);
}

Информация о результатах

Группа: Численный
Язык: C | C++
По умолчанию: On
Синтаксис командной строки: INT_STD_LIB
Влияние: Высокий
ИДЕНТИФИКАТОР CWE: 227, 369, 682, 872
Введенный в R2013b