Udostępnij przez


Ostrzeżenie C26823

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, że wartość wskaźnika może mieć wartość null i zobaczy, że wskaźnik zostanie wyłuszony, wyemituje C26823 ostrzeżenie. Można włączyć C26822 tylko w celu bardziej permissywnej analizy. Ta kontrola obsługuje również adnotacje SAL oraz gsl::not_null opis niezmienności kodu.

Przykład

void invalidate(int **pp);
void condition_null_dereference_invalidated(int* p)
{
    if (p)
        return;

    invalidate(&p);
    // The call above could reset the value of `p`, thus the low confidence warning.
    *p = 5; // warning: C26823
}

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