61.2 컴파일관련
, 전 역하자님이 작성#include <stdio.h> int *ten() // int 포인터를 반환하는 ten 함수 정의 { int num1 = 10; // num1은 함수 ten이 끝나면 사라짐 return &num1; // 함수에서 지역 변수의 주소를 반환하는 것은 잘못된 방법 } // ↑ warning C4172: 지역 변수 또는 임시 변수의 주소를 반환하고 있습니다. int main() { int *numPtr; numPtr = ten(); // 함수를 호출하고 반환값을 numPtr에 저장 printf("%d\n", *numPtr); // 10: 값이 나오긴 하지만 이미 사라진 변수를 출력하고 있음 return 0; }
이 해당 코드를 써도
return_pointer_warning.c(7): warning C4172: 지역 변수 또는 임시 변수의 주소를 반환하고 있습니다.가 안나옵니다.
그냥 바로 값 10나옵니다. .cpp가아니라 .c 파일로 해도 동일한데 왜그런지 알수있을까요?
Re: 61.2 컴파일관련
, 도장_ 관리자님이 작성그 뒤에 있는 본문 설명을 보시면 그렇게 하지 말라는 겁니다.
본문을 다시 인용합니다.
컴파일을 해보면 지역 변수의 주소를 반환한다면서 컴파일 경고가 발생합니다. 즉, num1은 함수 ten 안에서만 사용할 수 있는 지역 변수이며 함수가 끝나면 사라집니다. 그래서 return &num1;과 같이 지역 변수의 주소를 반환하는 것은 잘못된 방법입니다. 초보자들은 이런 실수를 하기 쉬우니 꼭 기억하세요.
컴파일러가 올바르게 지적하는 겁니다.