﻿ V3120. Potentially infinite loop. The variable from the loop exit condition does not change its value between iterations.

# V3120. Potentially infinite loop. The variable from 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:

``````int x = 0;
while (x < 10)
{
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 x = 0;
while (x < 10)
{
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:

 CWE-835

419
14 312

### Do you make errors in the code?

with PVS-Studio

Static code analysis
for C, C++, C# and Java

This website uses cookies and other technology to provide you a more personalized experience. By continuing the view of our web-pages you accept the terms of using these files. If you don't want your personal data to be processed, please, leave this site. Learn More →