C언어 - malloc, free, sizeof 를 이용한 동적 할당
본문 바로가기
CS/알고리즘 및 자료구조

C언어 - malloc, free, sizeof 를 이용한 동적 할당

by IYK2h 2020. 6. 26.
728x90

 

메모리를 할당할 때 malloc, calloc, realio 함수를 사용하여 메모리를 동적 할당한다.

동적 할당하는 이유는 메모리를 효율적으로 사용하기 위함이고

C언어 경우 메모리를 자동으로 관리를 해주지 않기 때문에 직접 관리해 메모리 누수를 예방

그리고 이미 할당된 메모리라도 언제든지 크기 조정할 수 있다.

하지만, 해제하지 않으면 누수가 발생하므로 꼭 명시적으로 메모리를 해제해야 한다.

 


 

 

malloc 함수 ( memory allocate - 메모리 할당 함수)


 - 함수의 원형

 <stdlib.h> //라이브러리 헤더파일
 void *malloc (size_t size)
//size_t 는 부호 없는 정수
//size 바이트의 메모리를 힙에서 할당하여 반환

int *i = (int*) malloc (sizeof(int));
//포인터 변수 i에 int의 바이트 크기인 4바이트를 할당한다.

 

free 함수 (메모리 할당 해제)

 


 - 함수의 원형

void free (void* arr)
//arr이 가리키는 할당된 메모리 해제
//해지 전까지 계속 존재하므로 함수에 의해 해제해야 한다.

 

 

예시 코드

#include <stdio.h>
#include <stdlib.h> //malloc 함수를 쓰기 위한 헤더

int main(void) {
    int l = 9;
    int* p_arr;

    p_arr = (int*) malloc(l * sizeof(int)); 
    //( int 크기 * l의 값(입력 받은 값) ) 크기만큼 동적 메모리 할당

    if (p_arr == NULL) {  // 메모리 동적 할당 실패

        printf("실패\n");
        exit(1);
    }

    printf("동적 할당받은 메모리 다음과 같다\n");
    for (int i = 0; i < l; i++) {
        printf("%d ", p_arr[i]);
    }

    free(p_arr);          // 동적 할당 해제

    return 0;
}

 

포인트 변수(배열)를 malloc 함수를 이용해 동적 메모리를 할당할 경우 ( sizeof(자료형) * 배열 크기 )를 입력해야 한다.

배열의 구조가 (자료형 크기*배열 크기) 이기 때문이다.

 

sizeof는 cpu나 운영체제의 bit 값이 아닌 컴파일러의 bit값을 따른다. (컴파일 할 때 값이 결정되어 상숫값으로 치환돼서 컴파일된다)

동적 할당 된 메모리의 크기는 sizeof 연산자를 이용하여 구할순 없다. 컴파일 단계에서 미리 정해진 메모리의 사이즈를 구하는데 사용된다고 보는게 좋다.

728x90

댓글