|
B() 함수에서 char *b 변수는 stack에 저장됩니다.
그래서 return b를 한 후 B() 함수의 모든 지역 변수(local variable)는 저장공간을 잃어버립니다.
왜냐하면 이들 지역 변수는 stack에 저장되는데 함수 리턴이 된 후 이 공간은 다른 함수의 호출을 위해 활용되기 때문입니다.
변수의 값(또는 저장공간)을 계속 유지하기 위해서는 global variable, static variable, const 타입으로 선언할 필요가 있습니다.
임형섭 님이 쓰신 글 :
: 답변 감사 드립니다.^^
:
: 제가 질문을 잘 못 올렸네요.
: 제가 묻고 싶었던것은 Edit->Text.c_str()을 사용하면 포인터값이 넘어오는데 실제로 이 값을 출력하면 원하는 결과가 아닌 쓰레기 값이 나오기 때문에 .(다시 말하면 아래 원문의 소스 결과 값이 원하는 결과가 안나오고 이상하게 나온다는거죠) strcpy(string, Edit1->Text.c_str())을 사용하면 원하는 결과가 나옵니다. 그 이유를 생각컨데 Edit->Text.c_str()에서 값을 반환하면 함수가 끝나기 때문에 변수생명주기(맞는용어인가요?)에 따라서 값이 사라지기 때문이라고 생각했습니다.
: 그런데 strcpy(string, Edit1->Text.c_str);에서 정확한 값이 저장되는 것을 보면 함수가 호출된후에 리턴되었을시 함수가 저장된 메모리가 없어지는 것이 아니라 리턴후 다음 문장이 처리된 다음 없어지는 건가요?
:
: void A(){
: char* a = B();
: }
: char* B(){
: char* b="aaa";
: return b;
: }
: 이런식일때 b의 값이 유지 되는 시점을 알고 싶습니다.
|