본문 바로가기
Program Language/c++

c++ 기초(동적 배열 할당)

by 토담이아빠 2023. 1. 13.

동적 배열 할당

 

이글은 "전문가를 위한 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

댓글