memset
или wmemset
используется с возможно неправильными аргументами
Этот дефект возникает, когда Polyspace® Bug Finder™ обнаруживает использование memset
или wmemset
функция с возможно неправильными аргументами.
void *memset (void *ptr, int value, size_t num)
заполняет первый num
байты блока памяти, который ptr
точки с заданным value
. Если аргумент value
неправильный, блок памяти инициализирован с непреднамеренным значением.
Непреднамеренная инициализация может происходить в следующих случаях.
Проблема | Риск | Возможное исправление |
---|---|---|
Второй аргумент '0' вместо 0 или '\0' . | Значение ASCII символьных '0' является 48 (десятичный), 0x30 (шестнадцатеричный), 069 (октальный), но не 0 (или '\0' ) . | Если вы хотите инициализировать с '0' , используйте одно из значений ASCII. В противном случае используйте 0 или '\0' . |
Второй и третий аргументы, вероятно, противоположны. Например, третий аргумент является буквальным, а второй аргумент не является буквальным. | Если порядок отменен, блок памяти непреднамеренного размера инициализируется с неправильными аргументами. | Измените порядок аргументов на противоположный. |
Второй аргумент не может быть представлен в байте. | Если второй аргумент не может быть представлен в байте, и вы ожидаете, что каждый байт блока памяти будет заполнен этим аргументом, инициализация происходит не так, как предполагалось. | Примените к аргументу битовую маску, чтобы получить обернутый или усеченный результат, который может быть представлен в байте. Когда вы применяете битовую маску, убедитесь, что она дает ожидаемый результат. Для образца замените |
Исправление зависит от первопричины дефекта. Часто детали результата показывают последовательность событий, которые привели к дефекту. Вы можете реализовать исправление на любом событии в последовательности. Если сведения о результате не отображают историю событий, можно отследить их с помощью опций правого щелчка в исходном коде и просмотреть предыдущие связанные события. Смотрите также Результаты интерпретации Bug Finder в интерфейсе пользователя Polyspace Desktop.
См. примеры исправлений ниже.
Если вы не хотите устранять проблему, добавьте комментарии к своему результату или коду, чтобы избежать другой проверки. Смотрите Адрес Результаты Polyspace через исправления ошибок или обоснования.
Группа: Программирование |
Язык: C | C++ |
По умолчанию: Off |
Синтаксис командной строки: MEMSET_INVALID_VALUE |
Влияние: Низкое |
ИДЕНТИФИКАТОР CWE: 665, 683 |