Warnung C26822

Dereferencing a null pointer 'variable' (lifetime.1)

Hinweise

Das Dereferenzieren eines Nullzeigers ist ein häufiges Problem in C und C++. Das Analysemodul enthält mehrere Prüfungen zur Behandlung solcher Probleme. Einen Vergleich finden Sie in diesem Blogbeitrag. Wenn das Analysemodul bestimmt, dass ein Zeiger null ist, wenn er dereferenziert wird, wird die Warnung C26822 ausgegeben. Beispielsweise kann nullptr explizit zugewiesen werden, oder die Dereferenzierung kann auf einer Verzweigung auftreten, die feststellt, dass der Zeiger Null ist. Sie können auch C26823 aktivieren, um Dereferenzierungen zu melden, bei denen ein Zeiger null sein kann. Diese Überprüfung unterstützt auch SAL-Anmerkungen und gsl::not_null, um Invarianten des Codes zu beschreiben.

Beispiel

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 
} 

Um diese Warnung zu beheben, stellen Sie sicher, dass im Code keine Dereferenzierung eines Nullzeigers vorhanden ist, z. B. durch Hinzufügen von NULL-Prüfungen. Falls sich der Code als korrekt erwiesen hat, können falsch positive Ergebnisse häufig mithilfe von gsl::not_null oder 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; 
}