• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

15:55 return 생략시 쓰레기값 나오는 이유

23.06.24 14:39 작성 조회수 292

1

getStruct() function에 retunr을 안넣어주면 trash value?가 나오는데 이유가 무엇인가요? (return 넣으면 제대로 작동해요)

근데 trash value도 아닌 것이 동일한 값이 계속 나옵니다

#include <iostream>


using namespace std;

struct S
{
    int a, b, c, d;
};

S getStruct()
{
    S my_s{1, 2, 3, 4};
    // return my_s;
}

int main()
{
    S main_s = getStruct();
    cout << main_s.a << endl; 
    cout << main_s.b << endl; 
    cout << main_s.a << endl; 
    cout << main_s.b << endl; 
}

>>

15644
1
15644
1

답변 1

답변을 작성해보세요.

2

Soobak님의 프로필

Soobak

2023.06.25

안녕하세요, 답변 도우미 Soobak 입니다.

C++ 에서 함수가 반환하는 값이 없거나, 반환문이 없는 경우에는,
컴파일러에 따라서 ERROR 혹은 UB(Undefined Behavior, 정의되지 않은 동작) 이 발생합니다.
참고로, 제가 질문자님의 코드를 G++ 으로 컴파일을 진행했을 시에는 다음과 같이 에러가 발생하네요.
image
반면, 질문자님께서 사용하시는 컴파일러와 환경에서는 정의되지 않은 동작(UB) 가 발생하기 때문에 그런 것입니다.
함수가 구조체를 반환하도록 선언되었지만, 실제로는 아무것도 반환하지 않는다면 함수가 종료된 후에 어떤 값이 반환될지는 알 수 없습니다.

동일한 쓰레기 값이 계속 나오는 이유는, 프로그램이 같은 메모리 위치를 계속 재사용하기 때문 일 수 있습니다.
하지만, 이에 대해서는 여전히 예측 불가능하며, 실행 환경에 따라서 달라질 수 있습니다.
말 그대로, 정의되지 않은 동작이 발생한 것이기 때문입니다.

yahoo님의 프로필

yahoo

질문자

2023.06.29

감사합니다~

근데 왜 강의에서는 return생략해도 잘 작동할까요? 음...