Sign change integer conversion overflow

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

Описание

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

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

Исправление

Фиксация зависит от первопричины дефекта. Часто детали результата (или подсказки исходного кода в Polyspace, когда Вы Кодируете) показывают последовательность событий, которые привели к дефекту. Можно реализовать закрепление на любом событии в последовательности. Если детали результата не показывают эту историю события, можно искать предыдущие ссылки переменных, относящихся к дефектному использованию, щелкают правой кнопкой по опциям по исходному коду и находят связанные события. См. также Интерпретируют Результаты Bug Finder в Пользовательском интерфейсе Рабочего стола Polyspace или Интерпретируют Результаты Bug Finder в 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