Note

[c++] 2차원배열의 동적할당

Daybreak21 2023. 4. 9. 18:55

이중포인터를 활용함

1차원 배열을 for문으로 여러번 할당하여 2차원배열을 할당한다. 

 

rows*cols 크기의 int행렬 mat를 동적할당하는 과정

-2차원배열의 동적 할당

int** alloc2DInt(int rows, int cols) {
    if (rows <= 0 || cols <= 0) return NULL;

    int** mat = new int* [rows];
    for (int i = 0; i < rows; i++) mat[i] = new int[cols];
    return mat;
}
  1. int*형 데이터를 저장할 공간 rows개를 동적으로 할당한다. 이 공간의 주소는 이중포인터 변수 mat (int **mat)에 저장한다. 
  2. 행렬의 i번째 행의 요소를 저장하기 위한 int형 배열을 동적으로 할당하여 그 주소를 mat[i]에 저장한다. 이때 요소의 개수는 cols개이다. 
  3. 모든 행에 대해 2번 과정을 반복한다. 

-2차원배열의 동적 해제

void free2DInt(int** mat, int rows, int cols = 0) {
    if (mat != NULL) {
        for (int i = 0; i < rows; i++) delete[] mat[i];
        delete[] mat;
    }
}

해제는 할당의 역순

 

 

 

*정리

mat : int**형 (mat는 mat[i]와 mat[i][j]접근가능한 이중포인터 변수)

mat[i] : int*형 (mat[0] 는 mat[0][0]의 주소가 저장되있는 포인터)

mat[i][j] : int형