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 |