Nagie's DevStory

[C] 50. malloc()과 free() 본문

Programming/C

[C] 50. malloc()과 free()

Nagie 2023. 10. 10. 22:36
728x90

malloc()과 free()는 C에서 동적 메모리 할당과 해제를 위해 사용되는 함수이다.

malloc() 함수의 원형은 아래와 같다.

 

#include <stdlib.h>

void* malloc(size_t size);

 

malloc()을 사용하기 전 반드시 표준 라이브러리 헤더(stdlib.h)를 포함해야 하며

해당 헤더를 포함하지 않으면 malloc()을 사용할 수 없다.

malloc()은 반환 형식이 void 포인터(void*) 형태라 사용하기 전 적절히 형 변환(TypeCasting)을 해줘야 한다.

malloc()의 인수 size_t size 부분은 바이트 용량을 의미하며 자료형에 따라 바이트 수를 다르게 입력해 줘야 한다.

실사용 예시는 아래와 같다.

 

int* dynamicArray = (int*)malloc(5 * sizeof(int)); // 5개의 int 크기만큼 메모리 할당

if (dynamicArray == NULL) {
    // 메모리 할당 실패
    exit(1);
}

 

본래라면 malloc()의 size 부분에 숫자 20을 넣어 20바이트를 할당받아야 할 것을 사람이 보기 좋게 sizeof(int)를 사용했다.

이렇게 동적 메모리를 할당받았다면

배열처럼 해당 메모리에 접근하거나 포인터 산술(Pointer Arithmetic)로 접근이 가능하다.

 

그럼, 동적 메모리를 할당받고 잘 사용했으니, free()를 사용해 동적 메모리를 반환을 시켜주자.

free()함수는 동적으로 할당한 메모리를 해제(반환) 하는 데 사용하며 할당받았던 동적 메모리를 사용하지 않을 때 

반드시 호출시켜 줘야 한다! 아래는 free() 함수의 원형이다.

 

#include <stdlib.h>

void free(void* ptr);

 

인수를 void 포인터(void*)형으로 받고 있으며 메모리 주소만 받으면 되기 때문에

따로 형변환(TypeCasting)을 시켜 넘겨주지 않아도 된다.

최종적으론 아래와 같은 형태로 나타낼 수 있겠다.

 

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

int main() {

  
    int* dynamicArray = (int*)malloc(5 * sizeof(int)); // 5개의 int 크기만큼 메모리 할당

    if (dynamicArray == NULL) {
        // 메모리 할당 실패
        exit(1);
    }

    for (int i = 0; i < 5; i++) {

        dynamicArray[i] = i;
        printf_s("%d\n",dynamicArray[i]);
    }

    free(dynamicArray); //메모리 해제!

}

 

p.s

원래라면 포스팅 중반에 작성되어야 했는데 까먹고 이제 뒤늦게 포스팅합니다...

 

728x90
Comments