728x90
[Do it C++ 완전정복_ 112~118p]
동적 메모리 할당과 해제 new, delete
- 동적 메모리 할당은 프로그램 실행 중(런타임)에 필요한 크기의 메모리를 운영체제에 요청하여 사용하는 방법
- 배열이나 변수의 크기를 실행 중에 결정 가능합니다.
- 할당한 메모리는 반드시 직접 해제(delete) 해야 합니다. (해제하지 않으면 메모리 누수 발생)
- 배열을 new[]로 할당했으면 delete[]를 사용하고, 단일 변수는 delete를 사용해야 합니다.
int* ptr = new int; // 정수 하나 동적 할당
int* arr = new int[5]; // int형 5개짜리 동적 배열
delete ptr; // 단일 변수 메모리 해제
delete[] arr; // 동적 배열 메모리 해제
메모리 누수 발생과 원인
- 동적 변수를 생성한 후 메모리를 해제(delete)해주지 않으면 메모리 누수 발생
- 메모리 누수는 사용한 메모리를 해제하지 않아, 힙 메모리가 점점 차오르는 현상이다.
- 일반 변수는 자동으로 메모리가 해제되지만 동적 변수는 프로그램에 끝날때까지 자동으로 해제되지 않는다.
- 지역 변수, 함수 인자 등은 자동으로 메모리가 해제되는 스택(Stack) 메모리 영역에 위치
- 동적 변수는 프로그램이 끝날 때까지 자동으로 해제되지 않아 직접 해제해야 되는 힙(Heap) 메모리 영역에 위치
- 메모리 구조 참고 (https://slowbreeze.tistory.com/232)
동적 메모리 할당 예제
#include <iostream>
int main() {
int n;
std::cout << "배열 크기 입력: ";
std::cin >> n;
int* arr = new int[n]; // 동적 배열 할당
for(int i = 0; i < n; i++)
arr[i] = i * 10; // 값 초기화
for(int i = 0; i < n; i++)
std::cout << arr[i] << " "; // 출력
std::cout << std::endl;
delete[] arr; // 메모리 해제
return 0;
}'C++ > C++ 문법' 카테고리의 다른 글
| C++ 구조체 (struct) (1) | 2025.10.13 |
|---|---|
| C/C++ 메모리 구조 (0) | 2025.10.13 |
| C++ 정적 변수(static), 상수 변수(const) (0) | 2025.10.13 |
| C++ 함수와 매개변수 (0) | 2025.10.13 |
| C++ 포인터(메모리 주소를 저장하는 변수)와 배열 (0) | 2025.10.13 |