Sdílet prostřednictvím


Upozornění C26822

Zrušení odvozování ukazatele null proměnné (lifetime.1)

Poznámky

Dereferencování ukazatele null je častým problémem v jazyce C a C++. Máme několik kontrol pro řešení takových problémů. Porovnání najdete v tomto blogovém příspěvku . Když modul analýzy odvodí hodnotu ukazatele na hodnotu null a zjistí, že ukazatel získá dereferenced, vygeneruje C26822 upozornění. Můžete také povolit C26823 pro přísnější analýzu. Tato kontrola také podporuje poznámky SAL a gsl::not_null popis invariantů kódu.

Příklad

void f(int *p) { 
    if (p == nullptr) 
        *p = 42; // warning: C26822
} 

void assign_to_gsl_notnull() { 
    int* p = nullptr; 
    auto q = gsl::make_not_null(p); // C26822 warning 
} 

Chcete-li toto upozornění vyřešit, ujistěte se, že kód neobsahuje žádný ukazatel null, případně přidáním kontrol null. V případě, že byl kód nalezen správně, je možné falešně pozitivní zjištění často opravit pomocí gsl::not_null poznámek SAL nebo poznámek SAL. Tady je několik příkladů, jak některé z těchto poznámek použít:

_Notnull_ int *get_my_ptr(); 
gsl::not_null<int *> get_my_ptr2(); 

void local_analysis(int *p) { 
    _Analysis_assume_(p != nullptr); 
    *p = 42; 
} 

void local_analysis2(_In_ int *p) { 
    int a = *p; 
}