Freigeben über


Warnung C26823

Ableiten eines möglicherweise Nullzeigers "Variable" (Lebensdauer.1)

Hinweise

Das Ableiten eines Nullzeigers ist häufiges Problem in C und C++. Wir haben mehrere Prüfungen, um solche Probleme zu bewältigen. Einen Vergleich finden Sie in diesem Blogbeitrag . Wenn das Analysemodul abgibt, dass der Wert eines Zeigers null sein kann und sieht, dass der Zeiger ableiten wird, wird eine C26823 Warnung ausgegeben. Sie können C26822 nur für eine eingeschränktere Analyse aktivieren. Diese Überprüfung unterstützt auch SAL-Anmerkungen und gsl::not_null beschreibt invarianten des Codes.

Beispiel

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
}

Um diese Warnung zu beheben, stellen Sie sicher, dass im Code keine NULL-Zeiger-Ableitung vorhanden ist, z. B. durch Hinzufügen von NULL-Prüfungen. Falls der Code richtig ist, können falsch positive Ergebnisse häufig mithilfe von gsl::not_null SAL-Anmerkungen behoben werden. Es gibt einige Beispiele für die Verwendung einiger dieser Anmerkungen unten:

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