-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
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
답변을 작성해보세요.
2
Soobak
2023.06.25
안녕하세요, 답변 도우미 Soobak 입니다.
C++
에서 함수가 반환하는 값이 없거나, 반환문이 없는 경우에는,
컴파일러에 따라서 ERROR
혹은 UB(Undefined Behavior, 정의되지 않은 동작)
이 발생합니다.
참고로, 제가 질문자님의 코드를 G++
으로 컴파일을 진행했을 시에는 다음과 같이 에러가 발생하네요.
반면, 질문자님께서 사용하시는 컴파일러와 환경에서는 정의되지 않은 동작(UB) 가 발생하기 때문에 그런 것입니다.
함수가 구조체를 반환하도록 선언되었지만, 실제로는 아무것도 반환하지 않는다면 함수가 종료된 후에 어떤 값이 반환될지는 알 수 없습니다.
동일한 쓰레기 값이 계속 나오는 이유는, 프로그램이 같은 메모리 위치를 계속 재사용하기 때문 일 수 있습니다.
하지만, 이에 대해서는 여전히 예측 불가능하며, 실행 환경에 따라서 달라질 수 있습니다.
말 그대로, 정의되지 않은 동작이 발생한 것이기 때문입니다.
답변 1