Menu
Coddy logo textTech

할당 실패 확인

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

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

이는 malloc()을 사용할 때마다 반환된 포인터를 사용하기 전에 성공 여부를 확인해야 함을 의미합니다. NULL 포인터를 사용하면 프로그램이 세그멘테이션 오류(segmentation fault)와 함께 중단될 것입니다.

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()을 사용할 때 적절한 오류 처리를 수행하는 C 프로그램을 작성하세요. 프로그램의 요구 사항은 다음과 같습니다:

  1. 사용자로부터 저장할 정수의 개수를 나타내는 정수 n을 입력받습니다.
  2. sizeof()와 함께 malloc()을 사용하여 n개의 정수를 저장할 배열을 위한 메모리를 동적으로 할당합니다.
  3. 반환된 포인터가 NULL인지 확인하여 메모리 할당이 성공했는지 검사합니다.
  4. 할당에 실패하면, Memory allocation failed!를 출력하고 프로그램을 종료합니다.
  5. 할당에 성공하면, Memory allocation successful!을 출력합니다.
  6. 사용자로부터 n개의 정수 값을 입력받아 할당된 배열에 저장합니다.
  7. 모든 값의 합계를 계산하고 Sum: [value] 형식으로 출력합니다.
  8. 할당된 총 바이트 수를 Bytes allocated: [value] 형식으로 출력합니다.

malloc()을 사용하기 위해 <stdlib.h> 헤더를 포함해야 함을 잊지 마세요. 프로그램은 할당된 메모리를 사용하기 전에 할당 실패 여부를 확인하는 필수적인 관행을 보여주어야 합니다.

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

4
10 20 30 40

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

Memory allocation successful!
Sum: 100
Bytes allocated: 16

이 챌린지는 동적 메모리 할당을 작업할 때 방어적 프로그래밍의 중요성을 강조하며, 프로그램이 예기치 않게 중단되지 않고 잠재적인 메모리 할당 실패를 우아하게 처리하도록 보장합니다.

치트 시트

할당된 메모리를 사용하기 전에 항상 malloc()NULL을 반환하는지 확인하십시오:

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

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

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

malloc()은 시스템의 가용 메모리가 부족할 때 실패할 수 있습니다. NULL 포인터를 사용하면 세그멘테이션 오류(segmentation fault)가 발생합니다. 이 NULL 확인은 견고한 C 프로그램을 작성하고 충돌을 방지하는 데 필수적입니다.

직접 해보기

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

int main() {
    // 정수의 개수를 읽습니다
    int n;
    scanf("%d", &n);
    
    // TODO: 여기에 코드를 작성하세요
    // - n개의 정수를 위한 메모리를 할당하기 위해 malloc()을 사용하세요
    // - 할당이 성공했는지 확인하세요
    // - 성공과 실패 케이스를 모두 처리하세요
    // - 정수들을 읽어서 저장하세요
    // - 합계와 할당된 바이트 수를 계산하세요
    
    return 0;
}
quiz icon실력 점검

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

Logic & Flow의 모든 레슨