C++ 의 동적할당에 대해서
글쓴이: linuxqna / 작성시간: 월, 2004/07/19 - 1:56오후
먼저 간단하게 코드를..
char* test(int n) { char* str; str = new char [n]; return str; } int main() { char* a = test(10); strcpy(a, "Test"); cout << a << endl; delete [] a; }
위와같이 test() 함수내의 지역변수 포인터로 str이 선언이 되었고
동적할당으로 메모리를 할당받고, 포인터를 리턴해서
main()에서 쓰게됩니다.
궁금한것은
*str이 test()안의 지역변수인데,
test()가 return될때, 할당받았던 메모리 영역이 해제되지 않나요 ?
아니면 new()로 동적할당받은것은 지역이건 전역이건
delete 할때까지 남아있기때문에
위의 사용이 올바른것인가요?
Forums:
test 함수 안의 str 포인터 변수는 new [] 로 할당 받은 주소
test 함수 안의 str 포인터 변수는 new [] 로 할당 받은 주소를 담고 있는 변수입니다. new [] 로 할당 받은 것 자체와 그 주소 값을 담는 str 변수는 별개 입니다. 주소를 담는 (값으로서) 변수일 뿐입니다. 그러므로 test 안에서 delete [] 하지 않는다면 그 주소를 main 에서 사용하고 나중에 delete [] 하시는 것은 올바른 사용법입니다.
다만, new / delete 는 실수할 여지가 있어서 다른 방법을 통해서 사용하시는 것이 좋다고 생각합니다. 예를 들어 auto_ptr 의 새로운 용법이나 vector 등을 이용하는 것이 일반적으로 더 낫다고 생각합니다.
댓글 달기