본문 바로가기
C++

[C++] - 1차원, 2차원 배열 동적 할당

by 개발 고양이 2023. 12. 8.

1차원 배열 동적 할당

 

C++에서 배열을 할당할 때에는 new와 delete 연산자를 사용한다. new 연산자는 사용자가 원하는 크기만큼의 배열을 할당받아 그 주소를 리턴한다. (따라서 포인터 변수를 사용해야 한다.)

 

힙에 int[5] 배열 영역을 할당한다.

 

delete 연산자로 배열 메모리를 다시 반환. delete 후 포인터 arr는 살아있지만, arr가 가리키는 곳에 더이상 접근 불가능

 

 

예를 들어, 정수 num을 입력받아서 num만큼 저장할 수 있는 정수형 배열을 선언해보자.

int num;
cin >> num;

//크기가 num인 정수형 배열 동적 할당
int *score = new int[n];

...

//배열 사용이 끝난 후 배열 메모리 반환
delete []score;

 

 


2차원 배열 동적 할당

그렇다면 배열이 2차원일때 동적 할당을 하려면 어떻게 해야 할까?

가장 일반적인 방법은, 이중 포인터를 사용하는 방법이다. 이중 포인터 변수를 선언하여 행 개수만큼 먼저 동적 할당한 후, 반복문을 이용하여 각 행마다 열 개수만큼 또 동적 할당을 해주면 된다. 

이중 포인터 배열을 만든 후, 각 포인터가 동적 할당된 메모리를 가리키도록 초기화한다.

 

예를 들어, 너비와 높이 값을 입력받아서, [높이]*[너비] 만큼의 정수형 2차원 배열을 선언해보자.

int height, width;
cin >> height >> width;

//2차원 배열 동적 할당
int **arr = new int*[height];

for(int i=0; i<height; i++){
	arr[i] = new int[width];
}

...

//delete를 이용하여 반환하기
for(int i=0; i<height; i++){
	delete[] arr[i];
}

delete[] arr;