Sign change integer conversion overflow

Переполнение при преобразовании между целыми числами со знаком и беззнаковым целым

Описание

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

Точное выделение ресурсов хранения для различных типов с плавающей точкой зависит от вашего процессора. Смотрите Target processor type (-target).

Фиксация

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

Смотрите примеры мер ниже.

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

Примеры

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

char sign_change(void) {
    unsigned char count = 255;

    return (char)count;
}

В операторе возврата, символьной переменной count без знака преобразован в символ со знаком. Однако char имеет 8 битов, 1 для знака константы и 7, чтобы представлять номер. Операция преобразования переполняется потому что 255 использования 8 битов.

Коррекция — типы преобразования Изменения

Одна возможная коррекция использует больший целочисленный тип. При помощи int, существует достаточно битов, чтобы представлять знак и числовое значение.

int sign_change(void) {
    unsigned char count = 255;

    return (int)count;
}

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

Группа: числовой
Язык: C | C++
Значение по умолчанию: On
Синтаксис командной строки: SIGN_CHANGE
Удар: Средняя
ID CWE: 192, 194, 195, 196
Введенный в R2013b