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.
Nie zezwalaj funkcji na zwracanie nieprawidłowego wskaźnika za pośrednictwem formalnej instrukcji zwrotnej lub parametrów wyjściowych.
int* ex1(int a)
{
return &a; // returns a dangling pointer to the stack variable 'a'
}
void ex2(int a, int** out)
{
*out = &a; // 'out' contains a dangling pointer to the stack variable 'a'
}
Uwagi
Wytyczne dotyczące okresu istnienia z podstawowych wytycznych dotyczących języka C++ przedstawiają kontrakt, zgodnie z którym kod umożliwia bardziej szczegółowy wyciek pamięci statycznej i wykrywanie wskaźnika zwisającego. Podstawowe pojęcia dotyczące wytycznych to:
- Nigdy nie wyłuszaj nieprawidłowego (zwisającego) lub znanego wskaźnika o wartości null.
- Nigdy nie zwracaj, albo przez formalną instrukcję zwrotu lub parametr out, każdy zwisając wskaźnik z funkcji.
- Nigdy nie przekazuj nieprawidłowego wskaźnika (zwisającego) do dowolnej funkcji.
Nieprawidłowy wskaźnik zwisa, gdy wskazuje coś, czego już nie ma. Na przykład każdy wskaźnik do zmiennej lokalnej lub parametru, gdy zniknie z zakresu. Lub wskaźnik do zasobu, który został usunięty. Nawet wskaźnik do statycznego może być zwisając, jeśli wartość zostanie zmieniona, zanim będzie można jej użyć. Wskaźnik zwisania był kiedyś prawidłowy; to, co odróżnia go od innych rodzajów nieprawidłowych wskaźników, takich jak niezainicjowany wskaźnik lub nullptr.