다차원 배열(Multidimensional Array)이란?
C/C++에서 다차원 배열(multidimensional array)은 간단히 말해 '배열의 배열(array of arrays)'입니다. 하나의 배열 안에 또 다른 배열을 요소로 가지는 구조로, 2차원 이상의 데이터를 직관적으로 표현할 수 있습니다.
다차원 배열의 데이터는 표(테이블) 형태로 관리되며, 실제 메모리에는 행 우선 순서(row-major order)로 저장됩니다. 즉, 첫 번째 행의 모든 요소가 먼저 배치되고, 그다음 두 번째 행이 이어지는 방식입니다. 아래 다이어그램은 3 x 3 x 3 크기의 다차원 배열에 대한 메모리 할당 전략을 보여줍니다.

동적 할당 알고리즘
C++에서는 new와 delete 연산자를 사용하여 실행 시점에 다차원 배열의 크기를 결정하고 메모리를 할당할 수 있습니다. 기본적인 처리 흐름은 다음과 같습니다.
시작
배열의 차원(크기)을 선언한다.
new를 사용하여 2차원 배열 a[][]를 동적으로 할당한다.
배열에 값을 채워 넣는다.
배열의 내용을 출력한다.
delete로 메모리를 해제한다.
끝
예제 코드
다음 예제는 포인터 배열을 활용해 4 x 5 크기의 2차원 배열을 동적으로 생성하고, 각 행의 인덱스 값으로 초기화한 뒤 출력하는 과정을 보여줍니다.
#include <iostream>
using namespace std;
int main() {
int B = 4; // 행의 개수
int A = 5; // 열의 개수
// 행 포인터 배열 동적 할당
int** a = new int*[B];
for(int i = 0; i < B; ++i)
a[i] = new int[A]; // 각 행에 열 공간 할당
// 배열 채우기: a[i][j] = i (행 인덱스 값)
for(int i = 0; i < B; ++i)
for(int j = 0; j < A; ++j)
a[i][j] = i;
// 배열 출력
for(int i = 0; i < B; ++i)
for(int j = 0; j < A; ++j)
cout << a[i][j] << "\n";
// 메모리 해제: 할당된 행만큼 반복해야 안전
for(int i = 0; i < B; ++i)
delete [] a[i];
delete [] a;
return 0;
}
실행 결과
각 행이 자신의 행 인덱스(i) 값으로 채워졌으므로, 첫 번째 행은 모두 0, 두 번째 행은 모두 1로 출력됩니다.
0
0
0
0
0
1
1
1
1
1
2
2
2
2
2
3
3
3
3
3
정리 및 주의 사항
동적으로 할당한 2차원 배열은 반드시 할당의 역순으로 해제해야 합니다. 즉, 각 행(a[i])을 먼저 delete[]로 해제한 후, 마지막에 포인터 배열 자체(a)를 해제합니다. 또한 해제 시 반복문의 범위가 실제 할당된 행의 개수(B)와 일치하도록 주의해야 하며, 범위를 벗어난 메모리 해제는 미정의 동작(undefined behavior)을 유발할 수 있습니다.