컴퓨터/C\C++

[C/C++]C++ 이차원 배열 동적할당

ya_ya 2021. 7. 11. 21:24
반응형

동적할당

 

코드를 작성하면서 최적화라던지 여러가지 이유로 런타임에 배열의 크기를 결정해야 할 때가 있습니다.
그럴 때 동적할당을 하게 되는데, C++에서 1차원배열인 경우와 2차원배열은 경우의 작성 코드에 차이가 있어서 한번 소개해 보려고 합니다.

 

예제

<1차원 배열>

우선 크기가 5인 일차원 배열을 선언하는 경우의 코드입니다.

int* arr = new int[5]; //크기가 5인 일차원 배열 동적할당

일차원 배열의 경우에는 그냥 간단히 new 키워드를 이용해서 위와 같이 선언하면 됩니다.

2차원 배열의 경우에는 살짝 다릅니다.

 

<2차원 배열>

2차원 배열의 경우에는 2중 포인터를 사용합니다.
아래의 그림을 보면 좀 더 잘 이해할 수 있을 것입니다. 아래의 그림은 3X4 이차원 배열입니다.

arr의 각각의 인덱스들이 일차원 배열을 가르키고 있는 형태입니다.

 

아래와 같은 형태로 2차원 배열을 동적할당 할 수 있습니다.

int** arr = new int*[row]; //선언하고자 하는 이차원 배열의 행의 수 만큼 동적 할당

for(int i = 0; i < row; i++) //각각의 인덱스에 선언하고자 하는 배열의 크기만큼을 가르키게 함.
    arr[i] = new int[col];

 

위의 코드와 같은 형태로 3X4 배열을 동적할당하는 코드를 작성해보겠습니다. 

실제 코드를 작성할 때는 런타임에 row와 col 변수에 변수를 입력 받아서, 대입하면 됩니다.

int** arr = new int*[3]; //행의 크기가 3인 이차원 배열

for(int i=0; i<3; i++) //각각의 행에 길이가 4인 배열을 할당
	arr[i] = new int[4];

 

2차원 배열 할당 해제

 

그렇다면 할당한 2차원 배열을 할당 해제하는 방법을 알아보겠습니다. 
일반적으로는 반복문을 사용해서 할당을 해제합니다. 3X4 배열을 할당하고, 할당을 해제하는 코드를 보여드리겠습니다. 아래 코드를 보면 쉽게 이해할 수 있을 것입니다.

/******3x4 이차원 배열 할당******/
int** arr = new int*[3];

for(int i=0; i<3; i++)
	arr[i] = new int[4];
/*****************************/


/**********할당 해제***********/
for(int i=0; i<3; i++)
	delete[] arr[i];

delete[] arr;
/*****************************/

 

가벼운 마음으로 C++에서 2차원 배열을 어떻게 동적할당을 하는지 알아봤습니다.

반응형