Page 49 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 49

하고 할당할 수 있지만, 동적 변수는 어느 시점에 얼마만큼의 공간을 할당할지 정확하게 예측할 수 없으므
                           로 프로그램 실행 중(run time)에 결정합니다.




                        calloc, malloc 함수는 힙(heap)이라는 특별한 ‘빈 공간(free space)’에 기억 장소를 확보합니
                        다. 이때 확보한 메모리가 불필요하면 그 공간을 해제해야 합니다. 이를 위해 제공되는 함수
                        가 free 함수입니다.


                                 free 함수

                         헤더      #include <stdlib.h>
                         형식      void free(void *ptr);
                                 ptr이 가리키는 메모리를 해제하여 이후에 다시 할당할 수 있도록 합니다. ptr이 NULL 포인터인 경우 아무
                                 것도 하지 않습니다. 이때 ptr로 전달된 실인수(actual argument)가 calloc 함수, malloc 함수, realloc
                         해설
                                 함수에 의해 반환된 포인터가 아니거나 영역이 free 함수, realloc 함수를 호출하여 이미 해제된 영역이
                                 면 아무것도 하지 않습니다.
                         반환값     없음



                        free 함수를 사용하면 프로그램을 실행하는 도중에도 원하는 시점에 변수를 생성하거나 제거
                        할 수 있습니다.
                           위에 소개한 세 함수 외에도 이미 할당한 메모리 크기를 변경하여 다시 할당하는 realloc 함수가 있습니다.


                        다음 실습 2-3을 통해 하나의 int형 변수를 calloc 함수로 생성하여 정수 값을 대입, 출력한
                        후 free 함수로 해제하겠습니다.


                          실습 2-3                                               •완성 파일 chap02/intdynamic.c

                         01  /* int형 객체를 동적으로 생성하고 해제합니다. */
                                                                                     실행 결과
                         02  #include <stdio.h>
                                                                               *x = 57
                         03  #include <stdlib.h>
                         04
                         05  int main(void) {
                         06    int * x;
                         07    x = calloc(1, sizeof(int));    /* int형 포인터에 메모리 할당 */
                         08    if(x == NULL) {
                         09      puts("메모리 할당에 실패했습니다.");
                         10    }else {
                         11      *x = 57;
                         12      printf("*x = %d\n", *x);




                                                                                      02• 기본 자료구조  49
   44   45   46   47   48   49   50   51   52   53   54