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

The analyzer detected a potentially infinite loop with its exit condition depending on a variable whose value never changes between iterations\.

Consider the following example:

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

The loop's exit condition depends on variable `x` whose value will always be zero, so the `x < n` check \(if `n > 0`\) will always evaluate to `true`, causing an infinite loop\.

A correct version of this code:

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

Here is another example where the loop exit condition depends on a variable whose value, in its turn, changes depending on other variables that never change inside the loop\. Suppose we have the following method:

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

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

    j++;
  }
}
```

The loop's exit condition depends on the `a` parameter\. If `a` does not pass the `a >= 32` check, the loop will become infinite, as the value of `a` does not change between iterations\.

This is one of the ways to fix this code:

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

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

    j++;
  }
}
```

In the fixed version, the local variable `j` controls how the `a` parameter's value changes\.