Udostępnij przez


Ostrzeżenie C26822

Wyłuszczenie wskaźnika o wartości null "zmienna" (okres istnienia.1)

Uwagi

Wyłuszczenie wskaźnika null jest częstym problemem w językach C i C++. Mamy kilka kontroli, aby poradzić sobie z takimi problemami. Zobacz ten wpis w blogu, aby zapoznać się z porównaniem. Gdy aparat analizy wywnioskuje wartość wskaźnika o wartości null i zobaczy, że wskaźnik zostanie wyłuszony, wyemituje C26822 ostrzeżenie. Można również włączyć C26823 na potrzeby bardziej rygorystycznej analizy. Ta kontrola obsługuje również adnotacje SAL oraz gsl::not_null opis niezmienności kodu.

Przykład

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 
} 

Aby rozwiązać to ostrzeżenie, upewnij się, że w kodzie nie ma wyłusku wskaźnika o wartości null, co może spowodować dodanie sprawdzania wartości null. W przypadku znalezienia poprawnego kodu wyniki fałszywie dodatnie często można naprawić za pomocą adnotacji SAL lub przy użyciu gsl::not_null adnotacji SAL. Poniżej przedstawiono kilka przykładów użycia niektórych adnotacji:

_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; 
}