본문 바로가기
C++/기본

[C++] 7. 메모리

by 위니밍 2025. 3. 29.
반응형
📌 요약: C 스타일 동적 할당 | C++ new/delete | 안전한 메모리 반납 | 배열 할당 및 해제

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

C++에서는 실행 중 필요한 메모리를 동적으로 할당/해제할 수 있습니다. C 스타일은 malloc/free, C++ 스타일은 new/delete 연산자를 사용합니다.

🧾 C 스타일 동적 할당

malloc 함수는 지정한 바이트만큼의 메모리를 힙 영역에 동적으로 할당하며, 반환된 주소는 반드시 free 함수를 통해 반납해야 합니다.

// malloc 함수를 통해 원하는 크기의 메모리를 할당받음
int* intPtr = (int*)malloc(sizeof(int));
char* charPtr = (char*)malloc(sizeof(char));
void* ptr = malloc(100);

// free 함수를 통해 메모리 반납
free(intPtr);
free(charPtr);
free(ptr);
🔧 C++ 스타일 동적 할당

C++에서는 new 연산자를 사용해 메모리를 할당하며, delete 연산자를 통해 할당된 메모리를 해제합니다.

int* intPtr = new int;
char* charPtr = new char;

delete intPtr;
delete charPtr;
⚠️ 안전한 메모리 반납

같은 포인터를 두 번 delete 하는 것은 정의되지 않은 동작(오류)을 유발할 수 있습니다.
따라서, 메모리를 해제한 뒤에는 포인터를 nullptr로 설정하는 것이 안전합니다.

// 잘못된 사용 예
int* ptr1 = new int;
delete ptr1;
delete ptr1; // error : 이미 반납한 메모리를 다시 반납

// 안전한 사용 예
int* ptr2 = new int;
delete ptr2;
ptr2 = nullptr;   // 메모리 반납 후 nullptr 설정
delete ptr2;      // 아무 일도 일어나지 않음
📚 동적할당 메모리 사용

new로 할당받은 메모리는 delete 하기 전까지 자유롭게 사용할 수 있습니다.

int* intPtr = new int;
// 동적할당 받은 메모리를 사용할 수 있는 구간
delete intPtr;
🔢 동적 배열 할당 및 해제

사용자로부터 배열의 길이를 입력받아 그 크기만큼 동적 배열을 생성하고 사용하는 예제입니다.
배열은 delete[] 를 통해 해제해야 합니다.

int count;
cout << "배열의 길이를 입력하세요 : ";
cin >> count;

int* arr = new int[count];

for (int i = 0; i < count; i++) {
    arr[i] = i;
}

for (int i = 0; i < count; i++) {
    cout << arr[i] << " ";
}

delete[] arr;
반응형

'C++ > 기본' 카테고리의 다른 글

[C++] 9. 배열  (0) 2025.03.29
[C++] 8. 메모리 속성  (0) 2025.03.29
[C++] 6. 포인터  (0) 2025.03.29
[C++] 5. 함수  (0) 2025.03.29
[C++] 4. 반복문  (0) 2025.03.29