free(3)

#include <stdlib.h>

void free(void *ptr);

malloc(3) / calloc(3) / realloc(3) 등으로 할당한 메모리를 해제합니다. 할당된 메모리를 이미 free(ptr)했는 데, 또 free(ptr)을 호출하는 경우에는 잘못된 메모리에 대한 acess로 인하여 비정상적으로 종료될 수 있습니다. ptr이 NULL이라면 free(ptr)은 아무런 동작을 하지 않고 return합니다. 따라서 free(ptr); 후에는 ptr = NULL; 처럼 NULL로 초기화를 해두면 잘못하여 두 번 free()가 일어나더라도 아무런 문제를 발생시키지 않습니다. 

 

free(ptr);
ptr = NULL;  // ptr의 메모리가 해제되었다면 NULL로 초기화함

......

free(ptr); // 아무런 작업이 안일어남

 

파라미터

ptr
    - malloc(3) / calloc(3) / realloc(3) 등으로 할당된 메모리 주소

 

RETURN

없음

 


활용 예제

 

Sample

#include <stdio.h>
#include <stdlib.h>

......

int main(int argc, char *argv[])
{
    char *ptr;
    int  size;

    ......

    /* memory를 할당합니다. */
    if((ptr = (char *)malloc(size)) == NULL) {
        fprintf(stderr, "malloc error.\n");
        return 1;
    }

    ......

    /* memory를 해제합니다. */
    free(ptr);

    /* 
      free후에는 될 수 있으면 NULL을 대입하여 혹시라도 두 번 free하는 것을 방지하는 것이 좋습니다. 
      free한 메모리에 대해서 또 free하게 되면 coredump 비정상 종료될 수 있습니다.
    */
    ptr = NULL;

    return 0;
}

 


see also : memory 관련 함수

 

 

블로그 이미지

자연&사람

행복한 개발자 programmer since 1995.

댓글을 달아 주세요