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
[7655] Re:Re:malloc에 관련된 질문.
jeroh [] 1714 읽음    2001-05-21 22:20
이경문 님이 쓰신 글 :
: jeroh 님이 쓰신 글 :
: : malloc을 했는데도,memory가 할당되지 않아, 변수 값이 NULL로 나오는군요.
: : mallo이 안되는 경우는 어떤 경우인가요?
: :
: :
: : 그리고 또 다른 질문..
: :
: : char* test;
: : test = (char*)malloc(sizeof(a));
: : strcpy(test,"test");
: : printf("%s",test);
: : free(test);
: : printf("%s",test);
: :
: : 아래의 code에서 test를 free해주고 난 다음에 printf를 하면 여전히 test의 값이 찍히는데,
: : free를 하면 memory가 해제되니까 안찍혀야 되는 거 아닌가요?
: :
: : 또, free(test)와 test=NULL 의 code에는 어떤 차이가 있나요?
: :
: :
: malloc을 했을 때 NULL이 나오지 않는 원인은 많이 있지만
: 메모리가 부족해서 NULL을 return하는 경우가 많습니다.
: 그리고 메모리를 하였다 하더라고
: 다른 루틴에서 그 메모리를 malloc하여 사용하기 전까지는
: 그 메모리 영역의 내용이 변경되지 않을 수 있습니다.
: 즉 OS가 메모리 해제했다는 flag만 남기지 malloc했던 메모리의 모든 영역을
: 깨끗이 지우지는 않는다는 얘기입니다.
: 가장 아래줄의 printf는 상당히 불안한 코드로 에러를 유발할 수 있습니다.
:
: free(test)는 test가 가르키고 있는 곳의 메모리를 해제할 뿐이지
: test변수 자체를 변경시키지 않습니다.
: test = NULL은 pointer변수 test의 값을 NULL(0)으로 할당하는 단순한 assign statement입니다.
:

char* test;
test = (char*)malloc(sizeof(a));
strcpy(test,"test");
printf("%s",test);
free(test);
strcpy(test,"testing");
printf("%s",test);

의 code에서 두번째 printf에서 test값은 testing으로 찍히거든요.
이미 memory가 해제된 상태인테 strcpy가 가능한 이유를 잘 모르겠네요..



+ -

관련 글 리스트
7653 malloc에 관련된 질문. jeroh 1888 2001/05/21
7660     Re:malloc에 관련된 질문. 레조 1764 2001/05/22
7677         덧붙이자면, Drost 1550 2001/05/22
7672         Re:Re:malloc에 관련된 질문. jeroh 1661 2001/05/22
7654     Re:malloc에 관련된 질문. 이경문 1604 2001/05/21
7655         Re:Re:malloc에 관련된 질문. jeroh 1714 2001/05/21
7656             Re:Re:Re:malloc에 관련된 질문. 이경문 1687 2001/05/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.