﻿# V776\. Potentially infinite loop\. The variable in the loop exit condition does not change its value between iterations\.

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

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

```cpp
int Do(int x);
....
int n = Foo();
int x = 0;
while (x < n)
{
  Do(x);
}
```

Условие выхода из цикла зависит от переменной `x`, значение которой в цикле всегда будет равно нулю\. При `n > 0`, проверка `x < n` всегда будет истинной, что приведет к бесконечному циклу\.

Исправленный вариант:

```cpp
int Do(int x);
....
int n = Foo();
int x = 0;
while (x < n)
{
  x = Do(x);
}
```

Рассмотрим еще один пример\. Условие выхода из цикла зависит от переменной, изменение значения которой зависит от других переменных, которые никогда не меняются в теле цикла\.

```cpp
int Foo(int a)
{
  int j = 0;
  while (true)
  {
    if (a >= 32)
    {
      return j * a;
    }

    if (j == 10)
    {
      j = 0;
    }

    j++;
  }
}
```

Условие выхода из цикла зависит от параметра `a`\. В случае если параметр `a` не будет удовлетворять условию проверки `a >= 32`, то цикл будет бесконечным, так как значение `a` в теле цикла не изменяется\.

Корректный вариант:

```cpp
int Foo(int a)
{
  int j = 0;
  while (true)
  {
    if (a >= 32)
    {
      return j * a;
    }

    if (j == 10)
    {
      j = 0;
      a++; // <=
    }

    j++;
  }
}
```

Таким образом изменение параметра `a` будет зависеть от локальной переменной `j`\.