반응형
📌 요약: 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 |