Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dereferencja wskaźnika o wartości null "variable" (czas życia.1)
Uwagi
Dereferencja pustego wskaźnika jest częstym problemem w językach C i C++. Silnik analizy obejmuje kilka sprawdzeń, aby poradzić sobie z takimi problemami. Aby zapoznać się z porównaniem, zobacz ten wpis w blogu. Gdy silnik analizy ustali, że wskaźnik ma wartość null w punkcie, w którym jest dereferencjonowany, emituje ostrzeżenie C26822. Na przykład wskaźnik może być jawnie przypisany nullptr, lub dereferencja może wystąpić w gałęzi, która wskazuje, że wskaźnik ma wartość null. Można również włączyć funkcję C26823, aby zgłaszać dereferencje, w których wskaźnik może mieć wartość null. Ta kontrola obsługuje również adnotacje SAL oraz gsl::not_null, aby opisać niezmienniki 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 dereferencji wskaźnika null, potencjalnie przez dodanie sprawdzeń wartości null. Jeśli okaże się, że kod jest poprawny, fałszywe alarmy często można naprawić za pomocą gsl::not_null lub 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;
}