✅ 목표 (Goal)

지역 변수의 변수 및 객체의 참조를 반환할 경우 어떤 심각한 문제가 발생하는지 알아보자.

✅ 지역 변수의 참조를 반환해서는 안된다.

함수의 리턴을 여러개 하라면? ★★★

지역 변수 혹은 객체의 참조를 반환해서는 안되는데,

왜냐하면 지역 참조 변수를 반환할 경우 그 값의 안정성을 보장할수 없기 대문이다.

int* getAddress() {
    int x = 10;   // 자동 변수 x
    return &x;    // x의 주소를 반환
}

int main() {
    int* ptr = getAddress();
    // ptr은 x의 주소를 가리키지만, x는 이미 수명이 끝남
    printf("%d\\n", *ptr);  // 정의되지 않은 동작
    return 0;
}

함수 getAddress가 종료되면 x는 소멸됩니다.

따라서 반환된 주소는 유효하지 않은 메모리를 참조한다.

참조 주소는 살아있지만, 참고하고 있는 객체가 사라지는 댕글링 포인터가 되기 때문이다.

기본형은 복사를 한 이후에 반환(return)하기 때문에 지역 변수가 사라져도 별 문제가 없다.

지역 변수의 참조를 넘길때 제대로 동작 되는 것처럼 보이는데

이는 그렇게 보일뿐이지 유효하지 않은 주소를 참조하고 있기 때문에 위험하다.