동적 메모리 할당 (Dynamic Memory Allocation)
동적 메모리 할당은 프로그램 실행 중에 메모리를 할당하는 방식입니다. C++에서는 new
와 delete
연산자를 사용하여 동적 메모리를 할당하고 해제할 수 있습니다.
1. new 연산자
new
연산자는 동적으로 메모리를 할당하고, 포인터를 반환합니다.
int *p = new int; // 정수형 변수에 대한 메모리 할당
*p = 10;
cout << *p << endl; // 10 출력
2. delete 연산자
delete
연산자는 동적으로 할당된 메모리를 해제합니다.
delete p; // 메모리 해제
p = nullptr; // 포인터를 null로 설정하여 안전하게 만듦
3. 배열의 동적 메모리 할당
배열의 경우, new
연산자를 사용하여 메모리를 동적으로 할당할 수 있습니다.
int *arr = new int[5]; // 정수형 배열에 대한 메모리 할당
for (int i = 0; i < 5; i++) {
arr[i] = i * 2;
}
for (int i = 0; i < 5; i++) {
cout << arr[i] << " ";
}
cout << endl;
delete[] arr; // 배열 메모리 해제
arr = nullptr; // 포인터를 null로 설정하여 안전하게 만듦
메모리 누수 (Memory Leak)
메모리 누수는 할당된 메모리가 해제되지 않고 잃어버리게 되는 상황을 말합니다. 이는 프로그램의 성능 저하와 시스템 리소스 고갈을 초래할 수 있습니다. 따라서 동적 메모리 할당 후에는 반드시 메모리를 해제해야 합니다.
int *p = new int; // 메모리 할당
*p = 10;
cout << *p << endl; // 10 출력
// 메모리 누수 방지
delete p; // 메모리 해제
p = nullptr; // 포인터를 null로 설정하여 안전하게 만듦
예제 문제
문제 1: 동적 메모리를 사용하여 두 수의 합을 계산하는 프로그램 작성
사용자로부터 두 개의 정수를 입력받아 동적으로 메모리를 할당한 후, 두 수의 합을 계산하여 출력하는 프로그램을 작성하세요.
해설:
#include <iostream>
using namespace std;
int main() {
int *num1 = new int;
int *num2 = new int;
cout << "Enter first number: ";
cin >> *num1;
cout << "Enter second number: ";
cin >> *num2;
int sum = *num1 + *num2;
cout << "Sum: " << sum << endl;
// 동적 메모리 해제
delete num1;
delete num2;
num1 = nullptr;
num2 = nullptr;
return 0;
}
이 프로그램은 사용자로부터 두 개의 정수를 입력받아 동적으로 메모리를 할당하고, 두 수의 합을 계산하여 출력합니다.
문제 2: 동적 메모리를 사용하여 배열의 평균을 계산하는 프로그램 작성
사용자로부터 배열의 크기를 입력받아 동적으로 메모리를 할당한 후, 배열의 요소를 입력받아 평균을 계산하여 출력하는 프로그램을 작성하세요.
해설:
#include <iostream>
using namespace std;
int main() {
int n;
cout << "Enter the size of the array: ";
cin >> n;
int *arr = new int[n];
int sum = 0;
cout << "Enter " << n << " elements: ";
for (int i = 0; i < n; i++) {
cin >> arr[i];
sum += arr[i];
}
double average = static_cast<double>(sum) / n;
cout << "Average: " << average << endl;
// 동적 메모리 해제
delete[] arr;
arr = nullptr;
return 0;
}
이 프로그램은 동적 메모리를 사용하여 배열의 크기를 입력받고, 배열의 요소를 입력받아 평균을 계산하여 출력합니다.
문제 3: 문자열을 동적으로 할당하여 길이를 계산하는 프로그램 작성
사용자로부터 문자열을 입력받아 동적으로 메모리를 할당한 후, 문자열의 길이를 계산하여 출력하는 프로그램을 작성하세요.
해설:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char *str = new char[100]; // 최대 100글자의 문자열을 수용할 메모리 할당
cout << "Enter a string: ";
cin >> str;
int length = strlen(str);
cout << "Length: " << length << endl;
// 동적 메모리 해제
delete[] str;
str = nullptr;
return 0;
}
이 프로그램은 사용자가 입력한 문자열의 길이를 계산하여 출력합니다.
다음 단계
10일차의 목표는 C++의 동적 메모리 할당에 대해 학습하는 것이었습니다. 다음 날부터는 구조체와 열거형에 대해 다룰 것입니다.
내일은 "구조체와 열거형"에 대해 다룰 예정입니다. 질문이나 피드백이 있으면 댓글로 남겨 주세요!
'-----ETC----- > C++ 마스터 시리즈' 카테고리의 다른 글
[C++ 마스터] Day 12: 클래스와 객체 지향 프로그래밍 (OOP) 기초 (0) | 2024.08.01 |
---|---|
[C++ 마스터] Day 9: 포인터와 참조자 (0) | 2024.08.01 |
[C++ 마스터] Day 7: 함수와 재귀 (0) | 2024.08.01 |
[C++ 마스터] Day 8: 배열과 문자열 (0) | 2024.08.01 |
[C++ 마스터] Day 5: 조건문과 제어 구조 (0) | 2024.08.01 |