본문 바로가기

C 언어

2차원 배열 동적 할당 시 해제

2차원 배열을 메모리로 할당 받아보자.

 

더블포인터를 이용해서 한번 할당받고 다시 각각의 2차원배열 요소들을 할당 받아야 한다.

아래예제를 보자. 처음보면 상당히 복잡하고 난해할 수 있다. 특히 이중포인터를 사용했기 때문에 쉽게 이해가 가지 않을 수 있다. 이해가 가지 않는다면 우선 해당 코드를 복사해서 사용하고 차차 이해해도 된다.

출처: https://hijuworld.tistory.com/59

int** createArray(int rows, int cols) {
    int** array = malloc(rows * sizeof(int*)); // 행 포인터 배열 할당
    for (int i = 0; i < rows; i++) {
        array[i] = malloc(cols * sizeof(int)); // 각 행에 대한 메모리 할당
    }
    return array;
}


할당된 2차원 배열의 각 요소를 초기화할 필요가 있다.

이는 각 요소를 특정 값으로 설정함으로써 이루어진다.

void initializeArray(int** array, int rows, int cols, int value) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            array[i][j] = value;
        }
    }
}


2차원 배열의 메모리 해제
2차원 배열의 메모리를 해제할 때는 할당의 반대 순서로 진행한다. 

먼저 각 행의 메모리를 해제하고, 마지막으로 행 포인터 배열의 메모리를 해제한다.

void freeArray(int** array, int rows) {
    for (int i = 0; i < rows; i++) {
        free(array[i]); // 각 행의 메모리 해제
    }
    free(array); // 행 포인터 배열의 메모리 해제
}


그리고 메모리 해제역시 2차원배열이기 때문에 각 요소들을 해제하고 2차원배열을 해제해줘야 한다.