Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Zrušení odvozování pravděpodobně nulového ukazatele proměnné (lifetime.1)
Poznámky
Dereferencování ukazatele null je častým problémem v jazyce C a C++. Máme několik kontrol pro řešení takových problémů. Porovnání najdete v tomto blogovém příspěvku . Když modul analýzy zjistí, že hodnota ukazatele může být null a uvidí, že ukazatel získá dereferenced, vygeneruje C26823 upozornění. C26822 můžete povolit jenom pro podrobnější analýzu. Tato kontrola také podporuje poznámky SAL a gsl::not_null popis invariantů kódu.
Příklad
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
}
Chcete-li toto upozornění vyřešit, ujistěte se, že kód neobsahuje žádný ukazatel null, případně přidáním kontrol null. V případě, že byl kód nalezen správně, je možné falešně pozitivní zjištění často opravit pomocí gsl::not_null poznámek SAL nebo poznámek SAL. Tady je několik příkladů, jak některé z těchto poznámek použít:
_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;
}