|
jeroh 님이 쓰신 글 :
: 이경문 님이 쓰신 글 :
: : 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가 가능한 이유를 잘 모르겠네요..
:
:
:
strcpy이던지, printf이던지 그 함수들은 주어진 포인터 변수가 가리키는 곳이
메모리가 할당되었던지, 할당되어 있지 않던지 구분하지 않고 수행을 합니다.
만약 그 메모리가 critical할 부분이라면 프로그램이 다운되던지 하겠지요.
지롸밭도 지나갈 수 있지만, 잘못하면 크게 다치는 경우라고 비유해야 할까요?
|