• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

10:00 참조값 반환 질문

22.08.21 13:13 작성 조회수 172

0

#include <iostream>

using namespace std;

int& getValue(int x)
{
    int value = x * 2;
    return value;
}

int main()
{
    int& value = getValue(5);

    cout << value << endl;
    cout << value << endl;

    return 0;
}

위 코드 실행시

첫번째 cout에선 10이 나오지만

두번째 cout에선 쓰레기값이 나옵니다.

위와같이 나오는게

참조값은 한번 사용시 값이 사라져서 그런건가요?

답변 1

답변을 작성해보세요.

1

강민철님의 프로필

강민철

2022.08.22

제시해주신 코드의 경우 그렇습니다.

컴파일러의 warning 메시지를 혹시 보셨나요?

첨부해주신 코드를 컴파일하면 아래와 같은 warning 메세지가 나오는데 (g++ 컴파일러)

 

test.cc:8:12: warning: reference to stack memory associated with local variable 'value' returned [-Wreturn-stack-address]

    return value;

           ^~~~~

1 warning generated.

 

이는 이름 그대로 스택에 할당된 변수를 참조하였음을 의미합니다.

다시 말해 이는 스코프를 벗어나면 사라지게 되는 변수를 의미하지요.

 

두 번째     cout << value << endl; 의 경우 변수 사라진 이후에 참조되었기에 자연히 쓰레기값이 나옵니다.

 

근데 가령 아래와 같은 코드의 경우 쓰레기값이 나오지 않습니다.

왜냐하면 value 값이 사라진 이후 다시 한 번 getValue를 호출함으로서 

스택에 value가 저장되었기 때문입니다.

 

#include <iostream>

using namespace std;

int& getValue(int x)
{
    int value = x * 2;
    return value;
}

int main()
{
    int& value = getValue(5);

    cout << value << endl;

    int& value2 = getValue(5);

   cout << value2 << endl;

    return 0;
}

 

alstmd6715님의 프로필

alstmd6715

질문자

2022.08.24

장문의 도움 감사합니다

덕분에 이해가 갔습니다