간단한 시뿔뿔 문제

코딩 45.***.55.18

1번의 경우
Fun 함수의 반환형이 참조자인데 지역 변수를 반환하고 있습니다. 이렇게 되면 메인에서 리턴받을 함수가 x를 참조하고 싶은데 x은 지역 변수이기 때문에 fun 함수가 끝나면서 메모리에서 소멸하게 됩니다. 그러면 소멸된 메모리를 참조하려는 오류를 범하는 것이죠.
그래서 x를 반환하는 부분에서 컴파일 경고가 발생합니다. (컴파일 에러가 아닙니다.) 그리고 fun 함수에 접근하려고 하면 런타임 에러가 발생하게 되죠. 이렇게 해제된 메모리를 참조하는 참조자를 댕글링 레퍼런스(Dangling Reference)라고 합니다. 함수에서 참조자를 반환할 때는 지역 변수를 반환하여 댕글링 레퍼런스가 발생하지 않았는지 각별히 주의하여야 합니다.

2번의경우는 마찬가지입니다.
해결 방법은 3가지 입니다.

1. 전역변수 사용, 프로그램이 끝날때까지 할당된 공간을 사용한다. Fun 함수가 끝나도 사용가능
Int x = 10; 을 메인함수 fun 함수 밖에서 선언

2. Static 정적 변수 사용
Fun 함수 내에 static int x=10; 선언
프로그램이 끝날때까지 할당된 공간을 사용한다. 주의점은 정적변수는 fun 함수 내에서만 사용가능 다른 함수에서 사용 불가능

3. 동적할당, 반드시 메인함수에서 delete 해주어야함
Fun 함수내에 동적할당을 해줌, fun 함수가 반환될때도 할당된 공간을 사용가능.

Int * fun()
{
Int* x = new int;
*x = 10;
Return x;
}

Int main()
{
Cout << * fun();
Delete(fun());
Return 0;
}

Return by address 하고 return by reference 찾아보시기 바랍니다.