본문 바로가기
C언어/C 언어 중급

중급3강_C언어 동적 메모리 할당 완벽 가이드 – malloc부터 free까지 한 번에!

by AI쌤 2025. 4. 20.
반응형

 

✅ C언어 동적 메모리 할당 완벽 가이드 – malloc부터 free까지 한 번에!

C언어의 핵심 중 하나는 바로 **동적 메모리 할당(Dynamic Memory Allocation)**입니다.
메모리를 **코드 실행 중(runtime)**에 직접 관리할 수 있어
배열 크기를 유연하게 설정하거나 데이터를 효율적으로 다룰 수 있습니다.

이번 강의에서는 malloc, calloc, realloc, free 함수에 대해
기초부터 예제까지 단계별로 배워봅니다.


📌 동적 메모리 할당이란?

프로그램 실행 중에 필요한 만큼 메모리를 요청하고, 더 이상 사용하지 않을 때 반납하는 방식

💡 왜 필요할까?

  • 배열의 크기를 유연하게 설정하고 싶을 때
  • 사용자 입력에 따라 메모리 크기를 동적으로 설정할 때
  • 메모리 효율적 사용이 필요할 때

🧩 malloc 함수

void *malloc(size_t size);
  • size: 할당할 바이트 크기
  • 반환값: void 포인터 → 원하는 자료형으로 형변환 필요

✅ 사용 예시

int *arr = (int *)malloc(5 * sizeof(int));

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

🧩 calloc 함수

void *calloc(size_t n, size_t size);
  • n: 요소 개수, size: 한 요소의 크기
  • 0으로 초기화된 메모리 블록을 할당함

✅ 예시

int *arr = (int *)calloc(5, sizeof(int));

🧩 realloc 함수

void *realloc(void *ptr, size_t new_size);
  • 기존 메모리 블록을 새로운 크기로 재할당
  • 주소가 바뀔 수도 있음 (주의!)

✅ 예시

arr = (int *)realloc(arr, 10 * sizeof(int));

🧨 free 함수

free(ptr);
  • 동적으로 할당한 메모리를 반드시 해제해줘야 함
free(arr);

🛠 실전 예제: 사용자 입력에 따라 배열 크기 설정하기

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

int main() {
    int n, *arr;

    printf("몇 개의 정수를 입력할까요? ");
    scanf("%d", &n);

    arr = (int *)malloc(n * sizeof(int));

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

    for (int i = 0; i < n; i++) {
        printf("%d번째 숫자 입력: ", i + 1);
        scanf("%d", &arr[i]);
    }

    printf("입력된 숫자들: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }

    free(arr);
    return 0;
}

⚠️ 주의할 점

  • malloc, calloc 이후에는 NULL 체크 필수
  • 메모리를 사용한 후에는 반드시 free()로 해제
  • free() 후 해당 포인터를 다시 사용하지 않도록 주의

🎯 실습 과제

  1. 사용자로부터 N개의 정수를 입력받고 평균 구하기
  2. calloc으로 2차원 배열처럼 사용할 수 있는 구조 만들기
  3. realloc을 이용해 배열 크기 확장하면서 누적합 계산하기

📘 핵심 요약

함수 설명
malloc() 초기화되지 않은 메모리 할당
calloc() 0으로 초기화된 메모리 할당
realloc() 기존 메모리 블록 크기 변경
free() 메모리 해제

🗣 다음 주 예고: 함수 포인터와 콜백 함수 – 포인터의 실전 활용

포인터를 완전히 이해하려면 함수도 변수처럼 다루는 방법까지 가야 합니다.
다음 시간에는 함수 포인터, 그리고 콜백 함수 개념을 다뤄보겠습니다.

 

반응형