지역 변수의 변수 및 객체의 참조를 반환할 경우 어떤 심각한 문제가 발생하는지 알아보자.
지역 변수 혹은 객체의 참조를 반환해서는 안되는데,
왜냐하면 지역 참조 변수를 반환할 경우 그 값의 안정성을 보장할수 없기 대문이다.
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)하기 때문에 지역 변수가 사라져도 별 문제가 없다.
지역 변수의 참조를 넘길때 제대로 동작 되는 것처럼 보이는데
이는 그렇게 보일뿐이지 유효하지 않은 주소를 참조하고 있기 때문에 위험하다.