Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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;
}