아래 코드는 정상적으로 실행되던데요
CreateArr함수를 호출한다음 메인으로 돌아가면 지역변수 arr은 사라졌을텐데
어떻게 포인터 a가 정상적으로 주소를 담나요?
해당 주소에 "hold" 라는 지금 당장은 문자열이 남아 있기는 한데, 나중에 "hold" 라는 문자열이 있다는 보장이 없습니다.
"hold" 라는 문자열은 함수의 lifetime 과 전혀 관련 없는 공간에 저장되어 있습니다.
arr 는 "hold"가 저장되어 있는 메모리 어딘가를 가리키고 있다가 return 을 통해 main 에게 넘겨줄 뿐입니다.
C언어에서 문자열 상수는 프로그램이 시작될 때 별도의 메모리 공간을 할당받아 저장되며, (프로그램이 Undefined Behavior 를 포함하지 않는다면) 프로그램이 끝날 때 까지 변경되지 않습니다.
댓글을 작성하려면 로그인해야 합니다.
baraba6u 7년 전
아래 코드는 정상적으로 실행되던데요
CreateArr함수를 호출한다음 메인으로 돌아가면 지역변수 arr은 사라졌을텐데
어떻게 포인터 a가 정상적으로 주소를 담나요?