'new'를 이용한 동적 메모리
Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 6번째.
지금까지 여러분은 프로그램에 이미 생성된 변수를 가리키는 포인터를 다루었습니다. 하지만 프로그램이 실행되는 동안 변수를 생성해야 한다면 어떻게 해야 할까요? 이럴 때 new 키워드를 사용한 동적 메모리 할당이 필수적입니다.
new 키워드는 프로그램 실행 중에 힙(heap)에 변수를 위한 메모리를 할당할 수 있게 해줍니다. 스택(stack)에 생성되는 일반 변수와 달리, 동적으로 할당된 메모리는 명시적으로 해제할 때까지 유지됩니다.
int* ptr = new int; // 정수형을 위한 메모리를 할당합니다
*ptr = 42; // 할당된 메모리에 값을 대입합니다이 예제에서 new int는 정수를 저장하기에 충분한 메모리를 할당하고 해당 메모리 위치에 대한 포인터를 반환합니다. 그런 다음 다른 포인터와 마찬가지로 역참조 연산자를 사용하여 값을 할당하고 동적으로 할당된 변수에 접근할 수 있습니다.
동적 메모리 할당은 런타임까지 얼마나 많은 메모리가 필요할지 모르거나, 변수가 생성된 범위를 벗어나서도 존재해야 할 때 특히 유용합니다. 이러한 유연성 덕분에 new는 더 복잡한 프로그램을 구축하기 위한 강력한 도구가 됩니다.
챌린지
쉬움프로그램 실행 중에 변수를 위한 메모리를 할당하기 위해 new 키워드를 사용하여 동적 메모리 할당을 시연하는 프로그램을 작성하세요.
다음과 같은 입력이 제공됩니다:
- 동적으로 할당된 메모리에 저장할 정수 값
프로그램은 다음을 수행해야 합니다:
new키워드를 사용하여 정수형을 위한 메모리를 동적으로 할당합니다.new에 의해 반환된 포인터를numPtr이라는 이름의 포인터 변수에 저장합니다.- 역참조 연산자를 사용하여 입력된 값을 동적으로 할당된 메모리에 할당합니다.
- 포인터를 역참조하여 동적으로 할당된 메모리에 저장된 값을 출력합니다.
- 포인터에 저장된 메모리 주소를 출력합니다.
다음과 같은 정확한 출력 형식을 사용하세요:
Value: [value]
Address: [memory address]메모리 주소는 16진수 형식으로 표시되며, 이는 C++에서 동적으로 할당된 메모리의 메모리 주소를 보여주는 방식입니다.
치트 시트
new 키워드는 프로그램 실행 중에 힙(heap)에 변수를 위한 메모리를 할당합니다:
int* ptr = new int; // 정수를 위한 메모리를 할당합니다
*ptr = 42; // 할당된 메모리에 값을 할당합니다스택(stack)에 생성되는 일반적인 변수와 달리, 동적으로 할당된 메모리는 명시적으로 해제될 때까지 유지되며 생성된 범위를 벗어나서도 존재할 수 있습니다.
직접 해보기
#include <iostream>
using namespace std;
int main() {
// 입력 읽기
int value;
cin >> value;
// TODO: 아래에 코드를 작성하세요
// 'new'를 사용하여 정수형 메모리를 동적으로 할당하세요
// 포인터를 'numPtr'이라는 이름의 변수에 저장하세요
// 입력된 값을 동적으로 할당된 메모리에 할당하세요
// 결과 출력
cout << "Value: " << /* 여기서 numPtr을 역참조하세요 */ << endl;
cout << "Address: " << /* numPtr에 저장된 주소를 출력하세요 */ << endl;
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.