﻿# V127\. An overflow of the 32\-bit variable is possible inside a long cycle which utilizes a memsize\-type loop counter\.


> Это правило входит в группу "Диагностика 64\\\-битных ошибок"\\\. Разработка правил этой группы больше не ведётся, и в будущем они могут быть отключены\\\. Если вы используете эти правила, \[свяжитесь с нашей поддержкой\]\(https://pvs\-studio\.ru/ru/about\-feedback/\) — мы поможем найти замену или предложим альтернативное решение\\\.

Анализатор обнаружил потенциально возможную ошибку, связанную с тем, что в длинном цикле может переполниться 32\-битная переменная\.

Анализатор, конечно, не может определить все возможные ситуации, когда происходит переполнение переменных в циклах\. Но он поможет найти ряд типовых ошибочных конструкций\.

Рассмотрим пример:

```cpp
int count = 0;
for (size_t i = 0; i != N; i++)
{
  if ((A[i] & MASK) != 0)
    count++;
}
```

Приведенный код корректно работает в 32\-битной программе\. Переменной типа 'int' достаточно, чтобы посчитать количество каких\-то элементов в массиве\. Однако в 64\-битной программе количество таких элементов может превысить INT\_MAX и произойдет переполнение переменной 'count'\. Об этом и предупреждает анализатор, выдавая сообщение V127\. Корректный вариант:

```cpp
size_t count = 0;
for (size_t i = 0; i != N; i++)
{
  if ((A[i] & MASK) != 0)
    count++;
}
```

Также анализатор содержит ряд дополнительных проверок, чтобы сократить количество ложных срабатываний\. Например, сообщение V127 не будет выдано, если мы имеем дело с коротким циклом\. Пример кода, который анализатор считает безопасным:

```cpp
int count = 0;
for (size_t i = 0; i < 100; i++)
{
  if ((A[i] & MASK) != 0)
    count++;
}
```