2-1장 기본 자료구조 - 배열 : 메모리 할당, 동적 객체 (3/10)

 

해당 내용은 Do it! 자료구조와 함께 배우는 알고리즘 입문 C 언어 편 (전면 개정판)을 기반으로 작성되었습니다.


2-1장 기본 자료구조 - 배열 : 메모리 할당, 동적 객체 (3/10)

// int형 객체를 동적으로 생성하고 해제
#include <stdio.h>
#include <stdlib.h>

int main(void){
    int* x = calloc(1, sizeof(int));    // int형 포인터에 메모리 할당
    if (x == NULL)
        puts("메모리 할당에 실패했습니다.");
    else {
        *x = 57;
        printf("*x = %d\n", *x);
        free(x);                        // int형 포인터에 할당한 메모리 해제
    }

    return 0;
}

 

 

메모리 확보 함수 :  malloc()

 

메모리 확보 함수 : calloc()

- 호출한 calloc 함수는 지정된 (1 *sizeof(int) 바이트)크기의 메모리를 힙 영역에 할당하고, 할당한 메모리의 첫 번째 주소를 반환한다. 

 

메모리 해제 함수 : free()

- 프로그램을 실행하는 도중에도 원하는 시점에 변수를 생성하거나 제거할 수 있다.

- 해제한 영역의 크기를 자동 계산한다.

- free 함수 호출 시, 인수를 부여할 필요가 없다. 

 

calloc(), malloc()와 free() 함수의 관계성

- 힙이라는 특별한 '빈 공간'에 기억 장소를 확보한다. 

- 이때 확보한 메모리가 불필요하면 그 공간을 해제해야한다. 

- calloc() malloc() 함수 선언 시, 무조건 free() 함수로 메모리 해제해야한다.  ( 해제시 객체도 같이 사라진다)

 

동적 배열 / 객체 생성

 

객체 생성과 해제

- Type형의 단일 객체 *x의 생성과 해제

Type *x = calloc(1, sizeof(Type)); free(x);

 

- 요소가 Type형이고, 요소개수가 n인 배열 a의 생성과 해제

Type *a = calloc(n, sizeof(Type)); free(a);

 

int **p = calloc(10, sizeof(int *)); free(p);