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 wartość wskaźnika o wartości null i zobaczy, że wskaźnik zostanie wyłuszony, wyemituje C26822 ostrzeżenie. Można również włączyć C26823 na potrzeby bardziej rygorystycznej analizy. Ta kontrola obsługuje również adnotacje SAL oraz gsl::not_null opis niezmienności kodu.
Przykład
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
}
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;
}