C 언어

[c언어] malloc 함수로 메모리 할당 후 해제하기

피너츠36 2024. 5. 12. 09:36

[malloc 함수를 사용하는 이유: 동적배열]

malloc() 함수는 메모리를 효율적으로 사용할 수 있도록 돕는 함수입니다.

그렇다면 어떤 점에서 효율적 사용이라는 걸까요?

바로 프로그램 실행 중에 메모리를 할당하고 프로그램에서 더 이상 필요하지 않을 때는 메모리를 해제하여 메모리라는 한정된 자원을 필요할 때만 사용할 수 있게 한다는  점에서 효율적입니다.

이와 같은 동적 메모리 할당은 힙(heap)영역에서 이루어지는데 프로그램 실행 중 동적으로 크기가 변하는 데이터 가령 사용자 입력 값 및 동적배열 등을 처리할 때 유용합니다.

가령 char arr[n]과 같이 c언어에서 배열 선언 시 []안에 숫자가 아닌 변수 n을 넣을 경우 컴파일러는 배열의 크기를 알 수 없어 컴파일 시점에서 에러가 발생합니다. 동적배열을 사용할 시 필요한게 바로 malloc 함수입니다.

반면 char myArr[2001] 같이 배열을 선언하는 경우는 정적 메모리 할당이라고 하는데 컴파일 시점부터 메모리가 할당되며 할당된 메모리는 프로그램 종료 시점에 자동으로 해제됩니다. 주로 크기가 작고 고정된 데이터 입력 시 사용됩니다.


[malloc() 함수 사용법]

필요 라이브러리: stdlib.h
void *malloc(size_t size)

malloc 함수의 인자값 1개로 바이트로 계산된 메모리 크기를 넘겨주게 됩니다.

예시)

// 100개의 문자를 저장할 수 있는 메모리 할당
int size = 100;
char * ptr;

// char 포인터로 형변환 필요
// malloc() 함수는 성공 시 메모리의 시작주소 return
ptr = (char *)malloc(sizeof(char)*size);

[free() 함수 사용법]

메모리 누수를 방지하기 위해서는 malloc 사용 후 꼭 해제(free) 해줘야 합니다.

필요 라이브러리: stdlib.h
void free(void * ptr)

예시)

// free 함수 사용 시 heap 영역에서 동적할당된 메모리 제거됨
//메모리 동적할당
int *ptr;
ptr = (int*)malloc(sizeof(int)*10)

//동적할당 메모리 해제
free(ptr)