Menu
Coddy logo textTech

동적 할당 - malloc()

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

이제 프로그램 실행 중 힙에서 memory를 요청하는 기본 함수인 malloc()에 대해 배웁니다. malloc() 함수는 "memory allocation"을 의미하며, 컴파일 시 고정 크기의 변수를 선언하는 대신 필요할 때 memory를 동적으로 allocate할 수 있도록 합니다.

malloc() 함수는 하나의 인수를 받습니다. 바로 할당하려는 바이트 수입니다. 이 함수는 할당된 메모리 블록을 가리키는 void 포인터를 반환하며, 할당에 실패하면 NULL을 반환합니다. void 포인터를 반환하므로 형식이 지정된 포인터에 직접 할당할 수 있습니다. C에서는 캐스팅이 선택 사항입니다(C++에서는 캐스팅이 필요하다는 점과 다릅니다).

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // 정수 하나를 위한 메모리 할당
// ptr은 이제 정수를 담을 수 있는 메모리 위치를 가리킵니다

malloc()의 주요 장점은 유연성입니다. 실행 중에 필요한 메모리의 정확한 양을 요청할 수 있으며, 명시적으로 해제할 때까지 이 메모리를 사용할 수 있습니다. 이는 프로그램이 실행될 때까지 얼마나 많은 메모리가 필요한지 알 수 없는 경우에 특히 유용합니다.

<stdlib.h>를 include해야 malloc()을 사용할 수 있다는 점을 기억하세요. 반환된 void 포인터를 캐스팅하는 것은 C에서 선택 사항입니다. 할당하는 형식으로 자동 변환되기 때문입니다.

challenge icon

챌린지

쉬움

힙에서 단일 integer를 생성하고 다루기 위해 malloc()을 사용하여 동적 메모리 할당을 보여 주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다.

  1. malloc()을 사용하여 하나의 integer를 위한 메모리를 동적으로 할당합니다.
  2. 반환된 void 포인터를 integer 포인터로 캐스팅합니다.
  3. 사용자 input에서 integer 값을 읽습니다.
  4. 역참조 연산자를 사용하여 동적으로 할당된 메모리에 input 값을 Store합니다.
  5. 다음 형식으로 Stored 값을 Print합니다: Stored value: [value]
  6. 같은 메모리 location에 값의 square를 Calculate하고 Store합니다.
  7. 다음 형식으로 squared 값을 Print합니다: Squared value: [value]

malloc()을 사용하려면 <stdlib.h> 헤더를 include해야 합니다. 프로그램은 동적 메모리 할당의 기본 workflow, 즉 힙에서 메모리를 요청하고, 이를 사용하여 data를 Store하고 조작하며, 포인터 연산을 통해 allocated 메모리로 작업하는 과정을 보여 주어야 합니다.

예를 들어 사용자가 7을 입력하면 output은 다음과 같아야 합니다.

Stored value: 7
Squared value: 49

이 challenge에서는 컴파일 시점에 고정되는 대신 runtime에 메모리를 요청하여 프로그램의 메모리 사용에 더 큰 유연성을 제공하는 동적 메모리 할당의 fundamental concept를 소개합니다.

직접 해보기

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

int main() {
    // 입력 읽기
    int input_value;
    scanf("%d", &input_value);
    
    // TODO: 아래에 코드를 작성하세요
    // 1. malloc()을 사용하여 정수 하나를 위한 메모리를 할당하세요
    // 2. 반환된 포인터를 int*로 캐스트하세요
    // 3. 할당된 메모리에 입력 값을 저장하세요
    // 4. 저장된 값을 출력하세요
    // 5. 제곱을 계산하여 같은 위치에 저장하세요
    // 6. Print the squared value
    
    return 0;
}
quiz icon실력 점검

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

논리 & 흐름의 모든 레슨

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