이글은 "전문가를 위한 c++(개정4판)"을 학습한 내용을 직접 실습해보며 정리한 Review용 글입니다.
동적 배열 할당
용량이 큰 배열같은 경우 보통 힙에 동적 할당을 합니다. 이 때 new 연산자와 []를 사용합니다.
int arraySizeX = 1000;
int arraySizeY = 1000;
long arraySize = arraySizeX * arraySizeY;
int* myArrayBuffer = new int[arraySize];
이렇게 하면 int타입 원소에 대해 arraySize로 지정한 개수만큼 힙 메모리가 할당됩니다. 그리고 myArrayBuffer에는 배열에 대한 주소의 시작값이 스택메모리에 할당됩니다.
힙메모리에 배열을 할당한 후 사용한 뒤에는 반드시 배열을 힙에서 제거해야합니다. 제거할때는 new 연산자와 쌍을 이루는 delete 연산자를 사용합니다. 배열의 경우는 []연산자를 붙여서 delete[]와 같이 사용합니다.
delete[] myArrayBuffer;
myArrayBuffer = nullptr;
힙에서 제거 한 후 사용한 포인터 변수는 nullptr로 초기화 하는 것이 좋습니다. 이는 코드의 오류를 줄이기 위한 습관같은 것입니다.
다음은 배열을 동적할당하고 사용 후 제거하는 간단한 예제입니다.
#include <iostream>
using namespace std;
int main()
{
int arraySizeX = 1000;
int arraySizeY = 1000;
long arraySize = arraySizeX * arraySizeY;
int* myArrayBuffer = new int[arraySize]; //배열 메모리 할당
for (int i = 0; i < arraySize; i++) {
myArrayBuffer[i] = i; // 배열에 값 대입
}
//일부 배열 값을 출력한다.
for (int i = 10; i < 20; i++) {
cout << "index" << i << " : " << myArrayBuffer[i] << endl;
}
//사용 후 배열 메모리 해제
delete[] myArrayBuffer;
myArrayBuffer = nullptr;
return 0;
}
결과
index10 : 10
index11 : 11
index12 : 12
index13 : 13
index14 : 14
index15 : 15
index16 : 16
index17 : 17
index18 : 18
index19 : 19
new를 호출할때는 delete도 쌍을 이루어 호출해야합니다. new [] 와 delete[]도 마찬가지입니다. new나 new[]를 호출했는데 delete나 delete[] 빼먹으면 메모리 누수가 발생합니다. 메모리 누수를 비롯해 메모리 관련 오류는 프로그램 오류의 대부분을 차지합니다. 따라서 코드 작성 시 이 부분을 잘 숙지하고 있어야합니다.
'Program Language > c++' 카테고리의 다른 글
c++ 기초 (const 키워드의 사용법) (4) | 2023.01.16 |
---|---|
c++ 기초(스마트 포인터) (1) | 2023.01.13 |
c++ 기초(포인터 사용법) (0) | 2023.01.12 |
c++ 기초(스택과 힙) (0) | 2023.01.11 |
C++ 기초(이니셜라이저 리스트) (0) | 2023.01.10 |
댓글