ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C언어 free()
    Visual Studio/C 기초 2013. 9. 13. 16:49

    malloc() 함수나 calloc() 함수를 사용하여 메모리를 할당할 때 할당된 메모리는 프로그램에서 사용할 수 있는 전체 메모리의 양을 소모합니다.

    이렇게 사용 가능한 전체 메모리 영역을 가끔 힙(heap)이라 하는데 힙의 양은 제한되어 있습니다.

    프로그램에서 동적으로 할당된 메모리의 특정 블록을 사용한 후에는 나중에 다른 프로그램이나 함수에서 다시 할당하여 사용할 수 있도록 해제 시켜야 합니다. 이를 위해 free() 함수를 사용하는 것이죠.

     

    void free(void *ptr); 

    free() 함수는 ptr이 가리키는 메모리 영역을 해제합니다. malloc(), calloc(), realloc() 함수로 할당된 메모리 영역을 해제합니다. 만약 ptr이 가리키는 값이 NULL값이라면 free()는 아무런 동작을 하지 않습니다. 예제를 보겠습니다.

     

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

    #define BLOCK 30000

    main()
    {
     void *ptr1, *ptr2;
     ptr1 = malloc(BLOCK);
     if(ptr1 != NULL)
      printf("첫 번째의 %dB 만큼의 영역 할당에 성공했습니다.\n", BLOCK);
     else{
      printf("%dB 만큼의 영역을 할당하는 데 실패했습니다.\n", BLOCK);
      exit(1);
     }

     ptr2= malloc(BLOCK);
     if(ptr2 != NULL)
     {
      printf("두 번째의 %dB 만큼의 영역 할당에 성공했습니다.\n", BLOCK);
      free(ptr1);
      exit(0);
     }

     printf("%dB 만큼의 영역을 할당하는 데 실패했습니다.\n",BLOCK);
     free(ptr1);
     printf("첫 번째 블록의 메모리의 할당을 해제했습니다.\n");

     ptr2 = malloc(BLOCK);

     if(ptr2 != NULL)
      printf("free()함수 이후, %dB 만큼의 영역 할당에 성공했습니다.\n", BLOCK);

     free(ptr2);

     

     

     

    'Visual Studio > C 기초' 카테고리의 다른 글

    C언어 시프트 연산자  (0) 2013.10.01
    C언어 memset(), memcpy(), memmove()  (0) 2013.09.13
    C언어 realloc()  (0) 2013.09.11
    C언어 calloc()  (0) 2013.09.10
    C언어 malloc()  (0) 2013.09.06

    댓글

Designed by Tistory.