Menu
Coddy logo textTech

할당 실패 확인

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

malloc()은 동적 memory allocation을 위한 강력한 도구이지만, 반드시 이해해야 할 중요한 사실이 있습니다. malloc()은 실패할 수 있습니다. 시스템에 사용 가능한 memory가 부족해지면 malloc()은 요청을 처리할 수 없으며, 유효한 memory 주소 대신 NULL을 반환합니다.

이는 malloc()을 사용할 때마다 반환된 포인터를 사용하기 전에 성공했는지 확인해야 한다는 뜻입니다. NULL 포인터를 사용하면 프로그램이 세그멘테이션 오류와 함께 충돌합니다.

int *ptr = (int*)malloc(sizeof(int));

if (ptr == NULL) {
    printf("Memory allocation failed!\n");
    return -1;  // 프로그램을 종료하거나 오류를 처리하세요
}

// 여기서 ptr을 안전하게 사용할 수 있습니다
*ptr = 42;

이 NULL 검사는 선택 사항이 아니라 견고한 C 프로그램을 작성하는 데 필수적입니다. 현대 시스템에서는 메모리 할당 실패가 드물더라도, 특히 리소스가 제한된 환경이나 많은 양의 메모리를 요청할 때 발생할 수 있습니다. 전문적인 C 코드는 충돌을 방지하고 우아한 오류 처리를 제공하기 위해 항상 이러한 검사를 포함합니다.

challenge icon

챌린지

쉬움

malloc()을 사용한 동적 memory allocation에서 적절한 error handling을 보여 주는 C program을 작성하세요. program은 다음을 수행해야 합니다.

  1. 저장할 integer의 number를 나타내는 integer n을 사용자로부터 Read합니다
  2. malloc()sizeof()를 사용하여 n개의 integer로 구성된 array를 위한 memory를 동적으로 allocate합니다
  3. 반환된 pointer가 NULL인지 테스트하여 memory allocation이 successful했는지 Check합니다
  4. allocation이 failed하면 Memory allocation failed!를 Print하고 program을 종료합니다
  5. allocation이 succeeds하면 Memory allocation successful!을 Print합니다
  6. 사용자로부터 n개의 integer values를 Read하여 allocated array에 store합니다
  7. 모든 values의 sum을 계산하고 다음 형식으로 Print합니다: Sum: [value]
  8. 다음 형식으로 allocated된 total bytes를 Print합니다: Bytes allocated: [value]

malloc()을 사용하려면 <stdlib.h> header를 include해야 합니다. allocated된 memory를 사용하기 전에 allocation failure를 Check하는 essential practice를 program에서 보여 주어야 합니다.

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

4
10 20 30 40

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

Memory allocation successful!
Sum: 100
Bytes allocated: 16

이 challenge는 dynamic memory allocation을 사용할 때 defensive programming이 갖는 critical importance를 강조하며, program이 예기치 않게 crash하는 대신 potential memory allocation failures를 graceful하게 handle하도록 합니다.

직접 해보기

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

int main() {
    // 정수의 개수를 읽습니다
    int n;
    scanf("%d", &n);
    
    // TODO: 여기에 코드를 작성하세요
    // - malloc()을 사용하여 n개의 정수를 위한 메모리를 할당하세요
    // - 할당이 성공했는지 확인하세요
    // - 성공과 실패 경우를 모두 처리하세요
    // - 정수를 읽고 저장하세요
    // - Calculate the sum and bytes allocated
    
    return 0;
}
quiz icon실력 점검

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

논리 & 흐름의 모든 레슨

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