Menu
Coddy logo textTech

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

Coddy C 여정의 논리 & 흐름 섹션에 포함된 레슨. 63개 중 35번째.

when malloc()을 사용하여 memory를 동적으로 할당하면, 해당 memory는 명시적으로 해제할 때까지 allocated 상태로 유지됩니다. 사용이 끝났을 때 동적으로 allocated된 memory를 시스템에 반환하는 도구가 free() 함수입니다.

free() 함수는 하나의 인수를 받습니다. 바로 할당 해제하려는 메모리 블록을 가리키는 포인터입니다. 이 포인터는 malloc()(또는 calloc()과 같은 관련 함수)이 반환한 것과 동일한 포인터여야 합니다.

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // 메모리 할당
*ptr = 42;  // 메모리 사용
free(ptr);  // 작업이 끝나면 메모리 해제

free()를 호출하지 않으면 memory 누수라고 하는 문제가 발생합니다. 할당된 memory는 더 이상 사용하지 않더라도 프로그램에 의해 계속 예약된 상태로 남아 있습니다. 장시간 실행되는 프로그램이나 memory를 반복적으로 할당하는 프로그램에서는 이러한 누수로 인해 사용 가능한 system memory가 모두 소모되고 성능 문제가 발생하거나 충돌할 수 있습니다.

기억하세요: 모든 malloc()에는 이에 대응하는 free()가 있어야 합니다. 이러한 짝은 C 프로그래밍에서 책임감 있는 memory 관리에 필수적입니다.

challenge icon

챌린지

쉬움

동적 memory allocation 및 deallocation의 전체 lifecycle을 보여 주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:

  1. 저장할 integers의 개수를 나타내는 integer count를 사용자로부터 Read합니다
  2. malloc()sizeof()와 함께 using하여 count integers의 배열에 사용할 memory를 동적으로 Allocate합니다
  3. memory allocation이 successful했는지 Check합니다. 실패하면 Memory allocation failed!를 출력하고 프로그램을 종료합니다
  4. allocation이 성공하면 Memory allocated successfully!를 출력합니다
  5. 사용자로부터 count개의 integer values를 Read하여 allocated 배열에 store합니다
  6. 모든 values의 sum을 다음 형식으로 Calculate하고 출력합니다: Sum: [value]
  7. maximum value를 찾아 다음 형식으로 출력합니다: Maximum: [value]
  8. free()를 using하여 memory를 deallocate합니다
  9. cleanup을 확인하기 위해 Memory freed successfully!를 출력합니다

malloc()free()를 사용하려면 <stdlib.h> header를 include해야 합니다. 이 challenge는 프로그램에서 memory leaks를 prevent하기 위한 malloc()free()의 essential pairing을 보여 줍니다.

예를 들어 input이 다음과 같다면:

4
15 8 23 12

output은 다음과 같아야 합니다:

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

이 challenge는 더 이상 필요하지 않을 때 dynamically allocated된 모든 memory block을 적절히 free해야 한다는 critical concept를 강화하여, C programming에서 responsible memory management cycle을 완성합니다.

직접 해보기

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

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

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

논리 & 흐름의 모든 레슨

직접 연습해 보세요: 온라인 C 컴파일러