baraba6u   2년 전

아래 코드는 정상적으로 실행되던데요


CreateArr함수를 호출한다음 메인으로 돌아가면 지역변수 arr은 사라졌을텐데 

어떻게 포인터 a가 정상적으로 주소를 담나요?

sgchoi5   2년 전

해당 주소에 "hold" 라는 지금 당장은 문자열이 남아 있기는 한데, 나중에 "hold" 라는 문자열이 있다는 보장이 없습니다.

baraba6u   2년 전

나중에라는 무슨말씀인지 조금만 자세히 설명해주실 수 있으세용 ?ㅠ

bupjae   2년 전

"hold" 라는 문자열은 함수의 lifetime 과 전혀 관련 없는 공간에 저장되어 있습니다.

arr 는 "hold"가 저장되어 있는 메모리 어딘가를 가리키고 있다가 return 을 통해 main 에게 넘겨줄 뿐입니다.


C언어에서 문자열 상수는 프로그램이 시작될 때 별도의 메모리 공간을 할당받아 저장되며, (프로그램이 Undefined Behavior 를 포함하지 않는다면) 프로그램이 끝날 때 까지 변경되지 않습니다.

댓글을 작성하려면 로그인해야 합니다.