동적 할당 - 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에서 선택 사항입니다. 할당하는 형식으로 자동 변환되기 때문입니다.
챌린지
쉬움힙에서 단일 integer를 생성하고 다루기 위해 malloc()을 사용하여 동적 메모리 할당을 보여 주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다.
malloc()을 사용하여 하나의 integer를 위한 메모리를 동적으로 할당합니다.- 반환된 void 포인터를 integer 포인터로 캐스팅합니다.
- 사용자 input에서 integer 값을 읽습니다.
- 역참조 연산자를 사용하여 동적으로 할당된 메모리에 input 값을 Store합니다.
- 다음 형식으로 Stored 값을 Print합니다:
Stored value: [value] - 같은 메모리 location에 값의 square를 Calculate하고 Store합니다.
- 다음 형식으로 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;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리 & 흐름의 모든 레슨
직접 연습해 보세요: 온라인 C 컴파일러