V786. It is odd that value C is assigned to the X variable. The value range of variable: [A, B].


Анализатор обнаружил, что переменной пытаются присвоить значение, которое не входит в её диапазон возможных значений.

Рассмотрим несколько примеров, для которых анализатор выдает данное диагностическое сообщение:

bool b;
....
b = 100;

Нет никакого смысла присваивать значение 100 переменной типа bool. Возможно, что мы имеем дело с опечаткой и вместо 'b' должна использоваться другая переменная.

Рассмотрим другой пример:

struct S
{
  int flag : 1;
}
....
S s;
s.flag = 1;

Битовое поле 'flag' может приниматься значения из диапазона [-1, 0], а не [0, 1], как может показаться на первый взгляд. Причина в том, что тип переменной знаковый. Если вам нужно битовое поле с диапазоном в [0, 1], используйте тип 'unsigned':

struct S
{
  unsigned flag : 1;
}
....
S s;
s.flag = 1;

Согласно Common Weakness Enumeration, потенциальные ошибки, найденные с помощью этой диагностики, классифицируются как CWE-197.

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V786.


Найденные ошибки

Проверено проектов
363
Собрано ошибок
13 495

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;