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