Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C/C++ 다차원 배열 완벽 가이드: 개념부터 동적 할당까지


다차원 배열(Multidimensional Array)이란?

C/C++에서 다차원 배열(multidimensional array)은 간단히 말해 '배열의 배열(array of arrays)'입니다. 하나의 배열 안에 또 다른 배열을 요소로 가지는 구조로, 2차원 이상의 데이터를 직관적으로 표현할 수 있습니다.

다차원 배열의 데이터는 표(테이블) 형태로 관리되며, 실제 메모리에는 행 우선 순서(row-major order)로 저장됩니다. 즉, 첫 번째 행의 모든 요소가 먼저 배치되고, 그다음 두 번째 행이 이어지는 방식입니다. 아래 다이어그램은 3 x 3 x 3 크기의 다차원 배열에 대한 메모리 할당 전략을 보여줍니다.

C/C++ 다차원 배열 완벽 가이드: 개념부터 동적 할당까지

동적 할당 알고리즘

C++에서는 newdelete 연산자를 사용하여 실행 시점에 다차원 배열의 크기를 결정하고 메모리를 할당할 수 있습니다. 기본적인 처리 흐름은 다음과 같습니다.

시작
배열의 차원(크기)을 선언한다.
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)을 유발할 수 있습니다.