C언어 malloc() 마스터하기: 실전 예제로 이해하는 동적 메모리 할당
C언어에서 malloc()이란?
C 표준 라이브러리에서 malloc() — "memory allocation"의 줄임말 — 은 런타임에 연속된 메모리 블록을 동적으로 예약합니다. 이 함수는 해당 블록의 시작 위치를 가리키는 void* 포인터를 반환하며, 필요한 포인터 타입으로 캐스팅해 사용할 수 있습니다.
문법
ptr = (cast_type *)malloc(byte_size);
여기서:
ptr은 지정된 cast_type의 포인터입니다.
byte_size는 할당할 바이트 수입니다.
예제:
ptr = (int *)malloc(50);
이 호출 후 50바이트의 메모리가 예약되고, ptr은 해당 공간의 첫 번째 바이트를 가리킵니다.
실전 예제
#include <stdlib.h>
#include <stdio.h>
int main() {
int *ptr;
ptr = malloc(15 * sizeof(*ptr)); /* 15개 정수를 위한 공간 할당 */
if (ptr != NULL) {
*(ptr + 5) = 480; /* 6번째 정수에 480 할당 */
printf("6번째 정수의 값은 %d", *(ptr + 5));
}
return 0;
}
출력:
6번째 정수의 값은 480

핵심 요점
sizeof(int) 대신 sizeof(*ptr)을 사용하면 나중에 포인터 타입이 변경되어도 코드가 탄력적으로 대응됩니다.
- 시스템이 요청을 만족시킬 수 없으면
malloc()은 NULL을 반환하므로, 메모리 사용 전 항상 널 포인터 여부를 확인해야 합니다.
- 할당된 블록은 연속적이며 배열처럼 다룰 수 있습니다. 원래 포인터 값을 변경하지 않으려면 첨자 연산자보다는 포인터 연산을 선호하는 것이 좋습니다.
malloc()은 문자, 구조체, 사용자 정의 타입 등 모든 데이터 타입과 작동하므로 C 프로그래머에게 유연한 메모리 관리를 제공합니다.