Menu
Coddy logo textTech

'delete'를 이용한 메모리 해제

Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 7번째.

new를 사용하여 메모리를 동적으로 할당할 때, 해당 메모리는 사용이 끝났다고 해서 자동으로 사라지지 않습니다. 자동으로 정리되는 일반 변수와 달리, 동적으로 할당된 메모리는 명시적으로 해제할 때까지 계속 사용 중인 상태로 남습니다. 여기서 delete 키워드가 필수적이게 됩니다.

delete 키워드는 이전에 new로 할당되었던 메모리를 해제합니다. delete를 사용하면, 해당 메모리 사용이 끝났으며 다른 용도로 재사용할 수 있음을 시스템에 알리는 것입니다:

int* ptr = new int(42);  // 메모리 할당
// 메모리 사용...
delete ptr;              // 메모리 해제

동적 메모리 관리의 기본 규칙은 간단합니다: 모든 new에 대해 그에 상응하는 delete가 있어야 합니다. 동적으로 할당된 메모리를 해제하는 것을 잊어버리면 메모리 누수(memory leak)가 발생합니다 - 프로그램이 더 이상 사용하지 않는 메모리를 계속 점유하게 되어, 결국 시스템의 가용 메모리가 부족해지는 현상이 발생할 수 있습니다.

포인터에 대해 delete를 호출한 후에는, 해당 포인터는 유효하지 않게 되며 다시 사용해서는 안 됩니다. 실수로 사용하는 것을 방지하기 위해 삭제 후 포인터를 nullptr로 설정하는 것이 좋은 습관입니다.

challenge icon

챌린지

쉬움

new를 사용하여 메모리를 할당하고, 이를 사용한 다음, delete를 사용하여 적절히 할당 해제함으로써 전체 동적 메모리 생명주기를 보여주는 프로그램을 작성하세요.

다음 입력값이 제공됩니다:

  • 동적으로 할당된 메모리에 저장할 첫 번째 정수 값
  • 저장된 값을 업데이트할 두 번째 정수 값

프로그램은 다음을 수행해야 합니다:

  1. new를 사용하여 정수형 메모리를 동적으로 할당하고, 포인터를 dynamicPtr라는 이름의 변수에 저장합니다.
  2. 역참조 연산자를 사용하여 첫 번째 입력값을 동적으로 할당된 메모리에 할당합니다.
  3. 동적으로 할당된 메모리에 저장된 초기 값을 출력합니다.
  4. 동적으로 할당된 메모리의 값을 두 번째 입력값으로 업데이트합니다.
  5. 업데이트된 값을 출력합니다.
  6. delete를 사용하여 동적으로 할당된 메모리를 해제합니다.
  7. 삭제 후 포인터를 nullptr로 설정합니다.
  8. 메모리가 성공적으로 해제되었다는 확인 메시지를 출력합니다.

다음과 같은 정확한 출력 형식을 사용하세요:

Initial value: [first value]
Updated value: [second value]
Memory freed successfully

치트 시트

delete 키워드는 이전에 new로 할당되었던 메모리를 해제합니다:

int* ptr = new int(42);  // 메모리 할당
// 메모리 사용...
delete ptr;              // 메모리 해제

메모리 누수를 방지하기 위해 모든 new에는 그에 상응하는 delete가 있어야 합니다.

delete를 호출한 후에는, 유효하지 않은 메모리를 실수로 사용하는 것을 방지하기 위해 포인터를 nullptr로 설정하십시오:

delete ptr;
ptr = nullptr;

직접 해보기

#include <iostream>
using namespace std;

int main() {
    // 입력 값 읽기
    int firstValue, secondValue;
    cin >> firstValue;
    cin >> secondValue;
    
    // TODO: 아래에 코드를 작성하세요
    // 1. new를 사용하여 메모리를 할당하고 dynamicPtr에 저장하세요
    // 2. 할당된 메모리에 firstValue를 할당하세요
    // 3. 초기 값을 출력하세요
    // 4. secondValue로 업데이트하세요
    // 5. 업데이트된 값을 출력하세요
    // 6. 메모리를 삭제하고 포인터를 nullptr로 설정하세요
    // 7. 확인 메시지를 출력하세요
    
    return 0;
}
quiz icon실력 점검

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

로직과 흐름의 모든 레슨