exponenta event banner

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

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

Описание

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

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

    toupper, tolower

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

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

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

    div, ldiv

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

    abs, labs

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

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

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

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

Примеры

развернуть все

#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++
По умолчанию: Вкл.
Синтаксис командной строки: INT_STD_LIB
Воздействие: Высокое
CWE ID: 227, 369, 682, 872
Представлен в R2013b