c언어에서 return값의 lifetime이 어떻게될까요?
글쓴이: 호기심천국 / 작성시간: 목, 2020/07/16 - 3:18오후
char* func() { char* ret = "str1" ; // return ret ; return "str2" ; } int main() { char* x = func() ; }
이런 코드가 있을때 func함수에서 ret은 스택에 쌓이고, lifetime은 func함수 내에서 소멸되는게 원칙으로 알고 있는데요.
바로 return "str2"을 하는 경우에는 어떻게 되나요? DATA영역에 잡혀서 lifetime이 전역변수와 같아지는건지..
다시생각해보니 "str1"도 DATA영역에 잡혀서 두 경우 모두 lifetime이 같은걸까요.. 헷갈리네요
Forums:
"str1"은 다른 곳에 저장되기 때문에
"str1"은 다른 곳에 저장되기 때문에 lifetime에 영향을 받지 않습니다. 역시 "str2"도 다른 곳에 저장되기 때문에 return "str2"도 전역변수와 같이 취급됩니다.
문제는 함수 내에서 생성된 데이터의 주소값을 넘겨줄 때인데, 결론적으로 피해야 할 방법이죠.
ret은 사라지지만 "str1"은 영원합니다.
ret은 사라지지만 "str1"은 영원합니다.
어렵네요..
저도 어려워서 이것저것 찾아보고 있는데 ㅠ
댓글 달기