Udostępnij za pośrednictwem


Ostrzeżenie C26487

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.

Zobacz też