프로그래밍/C/C++

mallac를 사용한 2차원배열

Songker 2009. 4. 10. 14:21

- C 스타일 -

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int **array;
    int a, b, i, j;


    printf("Input The Numbers : ");                     /* 행과 열의 수를 입력 받음 */
    scanf("%d %d", &a, &b);               


// 생성
    array = (int **)malloc( sizeof(int) * a);         /* 행의 수만큼 동적으로 할당함 */
    for (i = 0; i < a; i++)                                   /* 열의 수만큼 각 행에 동적으로 메모리 공간을 할당함 */
    {
        array[i] = (int*)malloc(sizeof(int) * b);
    }
   
 // 값 대입
    for (i = 0; i < a; i++)                                   /* 루프를 돌면서 각 행과 열에 값을 입력받음 */
 {
        for (j = 0; j < b; j++)
        {
            printf("Input Num \n%d, %d : ", i, j);
            scanf("%d", &array[i][j]);
        }
    }


 // 출력
    for (i = 0; i < a; i++)                                  // 입력받은 값을 출력함.
        for ( j = 0; j < b; j++)
            printf("%d %d : %d \n", i,j, array[i][j]);
 
 // 할당 해제
    for (i = 0; i < a; i++)                                 // 열에 해당하는 메모리 공간 해제
        free(array[i]);

    free(array);                                            // 행에 해당하는 메모리 공간 해제


    return 0;
}


[출처]
2차원 배열의 동적할당(malloc)|작성자 이태우




- C++ 스타일 -

2차원 배열을 선언 하실려면..


    int row = 5, col = 5;

    int** test;

    test = new int*[row];

    for(int i=0; i<row; i++)

        test[i] = new int[col];


선언된 배열을 지울 때는

    for(int i=0; i<row; i++)

        delete[] test[i];  

    delete[] test;


와 같은 방식으로 선언하셔야 합니다.