Анализатор обнаружил потенциально бесконечный цикл, условие выхода из которого зависит от переменной, значение которой никогда не меняется в нем.
Рассмотрим пример:
int x = 0; while (x < 10) { Do(x); }
Условие выхода из цикла зависит от переменной 'x', значение которой в цикле всегда будет равно нулю. Таким образом проверка 'x < 10' всегда будет истинной, что приведет к бесконечному циклу в данном случае. Правильный вариант мог бы выглядеть так:
int x = 0; while (x < 10) { x = Do(x); }
Рассмотрим еще один пример, когда условие выхода из цикла зависит от переменной, изменение значения этой которой зависит от других переменных, которые никогда не меняются внутри цикла. Пусть у нас имеется метод следующего вида:
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', то цикл будет бесконечным, так как его значение в цикле не изменяется. Корректный вариант мог бы выглядеть так:
int Foo(int a) { int j = 0; while (true) { if (a >= 32) { return j * a; } if (j == 10) { j = 0; a++; // <= } j++; } }
Таким образом изменение параметра 'a' будет зависеть от локальной переменной 'j'.
Данная диагностика классифицируется как: