|
이경문 님이 쓰신 글 :
: 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가 가능한 이유를 잘 모르겠네요..
|