본문 바로가기
-----ETC-----/C++ 마스터 시리즈

[C++ 마스터] Day 10: 동적 메모리 할당 (new, delete)

by cogito21_cpp 2024. 8. 1.
반응형

동적 메모리 할당 (Dynamic Memory Allocation)

동적 메모리 할당은 프로그램 실행 중에 메모리를 할당하는 방식입니다. C++에서는 newdelete 연산자를 사용하여 동적 메모리를 할당하고 해제할 수 있습니다.

 

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++의 동적 메모리 할당에 대해 학습하는 것이었습니다. 다음 날부터는 구조체와 열거형에 대해 다룰 것입니다.

 

내일은 "구조체와 열거형"에 대해 다룰 예정입니다. 질문이나 피드백이 있으면 댓글로 남겨 주세요!

반응형