Our website uses cookies to enhance your browsing experience.
Accept
to the top
>
>
>
V776. Potentially infinite loop. The...
menu mobile close menu
Additional information
toggle menu Contents

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

Dec 06 2016

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:

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 < 10' check will always evaluate to "true", causing an infinite loop. A correct version of this code could look like this:

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:

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:

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.

This diagnostic is classified as: