// education

동적 메모리 할당과 기초 자료구조

정적 배열은 프로그램 실행 전에 크기가 고정되지만, **동적 메모리 할당(Dynamic Memory Allocation)**을 이용하면 프로그램 실행 중에 필요한 만큼 힙(Heap) 메모리 공간을 원하는 크기로 할당받을 수 있습니다.


1. 동적 메모리 할당 4대 함수 (<stdlib.h>)


2. mallocfree 사용 표준 코드

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

int main(void) {
    int size = 5;
    // 1. int 5개 크기(20 Bytes) 동적 할당
    int *arr = (int *)malloc(sizeof(int) * size);

    if (arr == NULL) { // 메모리 할당 실패 검사
        printf("메모리 할당 실패!\n");
        return 1;
    }

    // 2. 메모리 사용
    for (int i = 0; i < size; i++) {
        arr[i] = (i + 1) * 10;
        printf("%d ", arr[i]);
    }
    printf("\n");

    // 3. 반드시 메모리 해제!
    free(arr);
    arr = NULL; // 가리키던 포인터 초기화 (Dangling Pointer 방지)
    return 0;
}

3. 메모리 누수 (Memory Leak) 주의사항

malloc()으로 할당받은 주소를 free()로 해제하지 않고 프로그램을 계속 돌리면, 사용하지 않는 힙 메모리가 계속 쌓여 컴퓨터 메모리가 부족해지는 메모리 누수(Memory Leak) 현상이 발생합니다.


4. 자주 묻는 질문 (Q&A)

Q. 허공을 가리키는 포인터(Dangling Pointer)란 무엇인가요? A. free(ptr)로 메모리를 해제한 후에도 ptr 변수에는 이전 메모리 주소가 그대로 남아있습니다. 이 해제된 주소를 다시 참조하려고 접근하면 튕김 사고가 나므로, free() 실행 즉시 ptr = NULL; 로 비워두는 습관이 매우 중요합니다.

← 이전전처리기 매크로와 다중 소스 파일 다음 →