Sdílet prostřednictvím


InfiniteLoop (dotaz CodeQL ovladače systému Windows)

Přehled

Porovnání mezi typy s různými šířkami v podmínce smyčky může způsobit nezdaření ukončení smyčky.

Doporučení

V podmínce smyčky použijte odpovídající typy.

Příklad

V tomto příkladu může výsledek porovnání vést k nekonečné smyčce, pokud je hodnota argumentu a větší než SHRT_MAX.

void InfiniteLoop(int a)
{
    for (short i = 0; i < a; i++) // BUG: infinite loop
    {
        // ...
    }
}

Abychom chybu vyřešili, měníme typ proměnné tak, aby odpovídal šířce proměnné:

void NotInfiniteLoop(int a)
{
    for (int i = 0; i < a; i++) 
    {
        // ...
    }
}

Další podrobnosti

Tento dotaz najdete v úložišti Microsoft GitHub CodeQL. Podrobnosti o tom, jak mohou vývojáři ovladačů systému Windows stáhnout a spustit CodeQL, najdete na stránce CodeQL and the Static Tools Logo Test.