함수가 정식 return 문이나 output 매개 변수를 통해 잘못 된 포인터를 반환 하도록 허용 하지 않습니다.Don't allow a function to return an invalid pointer, either through a formal return statement or through output parameters.

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'


C++ 핵심 지침의 수명 지침은 코드에서 수행할 수 있는 계약을 간략하게 설명 합니다.The Lifetime guidelines from the C++ Core Guidelines outline a contract that code can follow which enables more thorough static memory leak and dangling pointer detection. 지침의 기본 개념은 다음과 같습니다.The basic ideas behind the guidelines are:

  • 잘못 된 (현 현) 또는 null이 아닌 포인터를 역참조 하지 않습니다.Never dereference an invalid (dangling) or known-null pointer.
  • 정식 return 문이나 out 매개 변수, 함수에서의 현 수도 포인터를 기준으로 반환 하지 않습니다.Never return, either by formal return statement or out parameter, any dangling pointer from a function.
  • 함수에 잘못 된 (현 수) 포인터를 전달 하지 않습니다.Never pass an invalid (dangling) pointer to any function.

잘못 된 포인터는 더 이상 존재 하지 않는 항목을 가리키는 경우 수입니다.An invalid pointer is dangling when it points to something that isn't there anymore. 예를 들어 지역 변수 또는 매개 변수에 대 한 포인터는 범위를 벗어난 경우입니다.For example, any pointer to a local variable or parameter, once it's gone out of scope. 또는 삭제 된 리소스에 대 한 포인터입니다.Or, a pointer to a resource that's been deleted. 값이 변경 되 면 값이 변경 될 수 있는 경우 정적에 대 한 포인터도 현 수 일 수 있습니다.Even a pointer to a static can be dangling, if the value gets changed before it can be used. 현 지 포인터가 한 번 유효 했습니다. 이는 초기화 되지 않은 포인터 또는 nullptr같은 다른 종류의 잘못 된 포인터와 구별 하는 것입니다.A dangling pointer was once valid; that's what distinguishes it from other kinds of invalid pointers, such as an uninitialized pointer, or nullptr.

참고 항목See also