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) 에 저장되고 런타임에 크기를 결정할 수 있습니다. 자세한 내용은 메모리 구조를 참고하세요.

동적 메모리 할당 개념
스택은 크기가 고정되어 있지만, 힙은 malloc()으로 필요한 만큼 할당받을 수 있습니다.
구분스택 메모리힙 메모리
할당 시점컴파일 시실행 시
크기 결정고정가변
해제자동 (함수 종료 시)수동 (free 호출)
예시int arr[10];malloc(sizeof(int)*10)

malloc() 함수

**malloc()**은 Memory Allocation의 약자로, 힙 메모리에서 지정한 바이트만큼 공간을 할당합니다. 사용하려면 #include <stdlib.h>가 필요합니다.

c
코드 하이라이팅 중...
malloc 기본 사용법
malloc은 요청한 크기만큼 힙에서 메모리를 할당하고, 그 주소를 반환합니다.

malloc() 사용 패턴

c
코드 하이라이팅 중...

sizeof() 연산자

**sizeof()**는 자료형이나 변수의 크기를 바이트 단위로 반환합니다.

자료형sizeof() 결과
char1 바이트
int4 바이트
float4 바이트
double8 바이트
포인터4 또는 8 바이트 (시스템에 따라)
c
코드 하이라이팅 중...


형변환 (Casting)

malloc()은 void* 타입을 반환하므로, 사용하려는 포인터 타입으로 형변환해야 합니다.

c
코드 하이라이팅 중...

2차원 배열 동적 할당

2차원 배열을 동적으로 할당하려면 이중 포인터를 사용합니다.

c
코드 하이라이팅 중...
2차원 배열 동적 할당
이중 포인터 arr이 행 포인터 배열을 가리키고, 각 행 포인터가 실제 데이터를 가리킵니다.

2차원 배열 해제

할당의 역순으로 해제해야 합니다.

c
코드 하이라이팅 중...

free() 함수

**free()**는 malloc()으로 할당한 메모리를 해제합니다. 해제하지 않으면 메모리 누수(Memory Leak) 가 발생합니다.

c
코드 하이라이팅 중...
free 함수와 메모리 해제
free() 후에는 포인터를 NULL로 설정하는 것이 안전합니다.

연결 리스트에서의 활용

동적 메모리 할당은 연결 리스트에서 노드를 생성할 때 주로 사용됩니다.

c
코드 하이라이팅 중...

연결 리스트 삽입 예시

c
코드 하이라이팅 중...

이 함수는 새 노드를 리스트의 맨 앞에 삽입합니다. 구조체 포인터와 함께 사용되는 패턴을 익혀두세요.


정보처리기사 실기 대비 문제