C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[44488] Re:[질문]메모리 해제에 관해 질문이요
외랑 [] 729 읽음    2006-04-14 10:06
- 질문 1. delete b_node; => 이렇게 하면 str_b만 삭제가되고 str_a는 남아 있는지요?
b_node에 할당된 메모리를 해제한다는 것입니다. 여기서 b_node는 단지 str_b형의 주소(포인터)의 저장공간만을 말합니다. win32s시스템에서는 4byte 변수일 뿐입니다. 이 예에서는 b_node는 mynode라는 이름의 str_a형의 주소를 가지고있는 메모리의 주소입니다. 주의하실게 str_b와 str_a는 형태일뿐이라는 것입니다. int나 float처럼 말이지요. 찬찬히 따져서 생각해 보시기 바랍니다.

- 질문 2. delete b_node->mynode; => 이렇게 하면 str_a가 삭제가 되는지요?
이 예에서는 b_node->mynode는 a_node를 가리키고 있으므로 a_node의 할당이 해제되는 것입니다. str_a는 형일뿐이라는 말씀을 다시 드리고요,.. 질문의도를 짐작해보아.. a_node->a와 a_node->b는 해제됩니다. 그러나 주의할 것은 할당된 메모리는 해제되지만, 값은 그대로 있다는 것입니다. 실질적으로 b_node->mynode를 삭제하면 NULL을 대입하는 것이 안전합니다. 값은 유지되기 때문에 나중에 프로그래머가 잊어버리고 다시 엑세스하면 a_node가 할당된 주소를 알려줍니다(경우에 따라서는 쓰레기값으로 변했을수도 있습니다.). 안전하지 않은 엑세스가 가능한 것이죠.

- 질문 3. delete한후 a_node와 b_node에 접근하려 하면 에러가 발생하여야 하는거 아닌가요?
위에서 같이 말씀드렸듯이 delete만 한다고 해서 저장되었던 값이 사라지는 것은 아닙니다. 의도적으로 NULL을 대입하셔야 합니다. 안전 해제라고 부르는 방식입니다.
       예) delete b_node; b_node=NULL;


금영이 님이 쓰신 글 :
: typedef struct {
: int a;
: int b;
: } str_a;
:
: typedef struct {
: str_a *mynode;
: int c;
: } str_b;
:
:
: str_a *a_node;
: str_b *b_node;
:
: a_node = new str_a;
: b_node = new str_b;
:
: a_node->a = 1;
: a_node->b = 2;
:
: b_node->mynode = a_node;
:
: 질문 1. delete b_node; => 이렇게 하면 str_b만 삭제가되고 str_a는 남아 있는지요?
: 질문 2. delete b_node->mynode; => 이렇게 하면 str_a가 삭제가 되는지요?
: 질문 3. delete한후 a_node와 b_node에 접근하려 하면 에러가 발생하여야 하는거 아닌가요?

+ -

관련 글 리스트
44486 [질문]메모리 해제에 관해 질문이요 금영이 705 2006/04/14
44488     Re:[질문]메모리 해제에 관해 질문이요 외랑 729 2006/04/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.