C언어 동적 메모리 할당 (malloc, free)
코딩C언어
읽는데 5분 소요
처음 쓰여진 날: 2026-02-03
마지막 수정일: 2026-02-03
조회수: 23
요약
C언어 동적 메모리 할당의 기본 개념, malloc()과 free() 함수 사용법을 알아봅니다. 정보처리기사 실기에 자주 출제되는 동적 메모리 할당 문제를 풀기 위한 핵심 개념을 정리합니다.
동적 메모리 할당 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| malloc() | 힙 메모리에서 지정한 크기만큼 할당 | malloc(sizeof(int)) |
| sizeof() | 자료형의 크기(바이트)를 반환 | sizeof(int) = 4 |
| 형변환 | malloc 반환값을 원하는 포인터 타입으로 변환 | (int*)malloc(...) |
| free() | 할당된 메모리를 해제 | free(p); |
동적 메모리 할당이란?
동적 메모리 할당은 프로그램 실행 중에 필요한 만큼 메모리를 할당받는 방법입니다.
일반 변수는 스택(Stack) 에 저장되고 크기가 컴파일 시점에 결정됩니다. 반면 동적 메모리는 힙(Heap) 에 저장되고 런타임에 크기를 결정할 수 있습니다. 자세한 내용은 메모리 구조를 참고하세요.

| 구분 | 스택 메모리 | 힙 메모리 |
|---|---|---|
| 할당 시점 | 컴파일 시 | 실행 시 |
| 크기 결정 | 고정 | 가변 |
| 해제 | 자동 (함수 종료 시) | 수동 (free 호출) |
| 예시 | int arr[10]; | malloc(sizeof(int)*10) |
malloc() 함수
**malloc()**은 Memory Allocation의 약자로, 힙 메모리에서 지정한 바이트만큼 공간을 할당합니다. 사용하려면 #include <stdlib.h>가 필요합니다.
c
코드 하이라이팅 중...

malloc() 사용 패턴
c
코드 하이라이팅 중...
sizeof() 연산자
**sizeof()**는 자료형이나 변수의 크기를 바이트 단위로 반환합니다.
| 자료형 | sizeof() 결과 |
|---|---|
char | 1 바이트 |
int | 4 바이트 |
float | 4 바이트 |
double | 8 바이트 |
포인터 | 4 또는 8 바이트 (시스템에 따라) |
c
코드 하이라이팅 중...
형변환 (Casting)
malloc()은 void* 타입을 반환하므로, 사용하려는 포인터 타입으로 형변환해야 합니다.
c
코드 하이라이팅 중...
형변환을 잊지 마세요
malloc의 반환값을 형변환하지 않으면 경고가 발생할 수 있습니다. (int*), (char*), (struct node*) 등 알맞은 타입으로 변환하세요.
2차원 배열 동적 할당
2차원 배열을 동적으로 할당하려면 이중 포인터를 사용합니다.
c
코드 하이라이팅 중...

2차원 배열 해제
할당의 역순으로 해제해야 합니다.
c
코드 하이라이팅 중...
free() 함수
**free()**는 malloc()으로 할당한 메모리를 해제합니다. 해제하지 않으면 메모리 누수(Memory Leak) 가 발생합니다.
c
코드 하이라이팅 중...

free() 후 포인터 사용 금지
해제된 메모리를 다시 사용하면 오류가 발생합니다. free() 후에는 포인터를 NULL로 초기화하세요.
연결 리스트에서의 활용
동적 메모리 할당은 연결 리스트에서 노드를 생성할 때 주로 사용됩니다.
c
코드 하이라이팅 중...
연결 리스트 삽입 예시
c
코드 하이라이팅 중...
이 함수는 새 노드를 리스트의 맨 앞에 삽입합니다. 구조체 포인터와 함께 사용되는 패턴을 익혀두세요.