Menu
Coddy logo textTech

free()를 이용한 메모리 해제

Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 35번째.

malloc()을 사용하여 동적으로 메모리를 할당하면, 해당 메모리는 명시적으로 해제할 때까지 할당된 상태로 유지됩니다. free() 함수는 사용을 마친 동적 할당 메모리를 시스템에 반환하기 위한 도구입니다.

free() 함수는 하나의 인자를 받습니다: 해제하려는 메모리 블록에 대한 포인터입니다. 이 포인터는 malloc() (또는 calloc()과 같은 관련 함수)에 의해 반환된 것과 동일한 포인터여야 합니다.

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // 메모리 할당
*ptr = 42;  // 메모리 사용
free(ptr);  // 작업 완료 후 메모리 해제

free()를 호출하지 않으면 메모리 누수(memory leak)라고 알려진 현상이 발생합니다. 할당된 메모리는 더 이상 사용하지 않더라도 프로그램에 의해 예약된 상태로 남게 됩니다. 장시간 실행되는 프로그램이나 메모리를 반복적으로 할당하는 프로그램에서 이러한 누수는 사용 가능한 모든 시스템 메모리를 소모하여 성능 문제나 충돌을 일으킬 수 있습니다.

기억하세요: 모든 malloc()은 그에 대응하는 free()를 가져야 합니다. 이러한 쌍을 맞추는 것은 C 프로그래밍에서 책임감 있는 메모리 관리를 위해 필수적입니다.

challenge icon

챌린지

쉬움

동적 메모리 할당 및 해제의 전체 수명 주기를 보여주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:

  1. 사용자로부터 저장할 정수의 개수를 나타내는 정수 count를 읽습니다.
  2. sizeof()와 함께 malloc()을 사용하여 count개의 정수를 저장할 배열을 위한 메모리를 동적으로 할당합니다.
  3. 메모리 할당이 성공했는지 확인합니다. 실패하면 Memory allocation failed!를 출력하고 프로그램을 종료합니다.
  4. 할당에 성공하면 Memory allocated successfully!를 출력합니다.
  5. 사용자로부터 count개의 정수 값을 읽어 할당된 배열에 저장합니다.
  6. 모든 값의 합계를 Sum: [value] 형식으로 계산하고 출력합니다.
  7. 최댓값을 찾아 Maximum: [value] 형식으로 출력합니다.
  8. free()를 사용하여 메모리 할당을 해제합니다.
  9. 정리가 완료되었음을 확인하기 위해 Memory freed successfully!를 출력합니다.

malloc()free()를 사용하려면 <stdlib.h> 헤더를 포함해야 함을 기억하세요. 이 챌린지는 프로그램에서 메모리 누수를 방지하기 위해 malloc()free()를 필수적으로 짝지어 사용하는 방법을 보여줍니다.

예를 들어, 입력이 다음과 같다면:

4
15 8 23 12

출력은 다음과 같아야 합니다:

Memory allocated successfully!
Sum: 58
Maximum: 23
Memory freed successfully!

이 챌린지는 동적으로 할당된 모든 메모리 블록이 더 이상 필요하지 않을 때 적절하게 해제되어야 한다는 중요한 개념을 강화하며, C 프로그래밍에서 책임감 있는 메모리 관리 주기를 완성합니다.

치트 시트

malloc()으로 할당된 메모리를 해제하려면 free()를 사용하세요:

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // 메모리 할당
*ptr = 42;  // 메모리 사용
free(ptr);  // 작업 완료 후 메모리 해제

메모리 누수를 방지하기 위해 모든 malloc()은 그에 대응하는 free()를 가져야 합니다. free()에 전달되는 포인터는 malloc()에 의해 반환된 포인터와 동일해야 합니다.

직접 해보기

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

int main() {
    int count;
    
    // 저장할 정수의 개수를 읽습니다
    scanf("%d", &count);
    
    // TODO: 아래에 코드를 작성하세요
    // 1. sizeof()와 malloc()을 사용하여 메모리를 할당하세요
    // 2. 할당이 성공했는지 확인하세요
    // 3. 정수 값들을 읽어서 저장하세요
    // 4. 합계를 계산하고 최댓값을 찾으세요
    // 5. 할당된 메모리를 해제하세요
    
    return 0;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Logic & Flow의 모든 레슨