[C언어] 2차원 배열을 유동 할당/해제하는 예제

  이중 포인터로 2차원 배열을 유동 할당(동적 할당)할 수 있다. 다음은 이중 포인터 **aNum에 크기가 5*4인 정수형 2차원 배열을 할당하고, 값을 0으로 채워서 결과를 확인하는 예제이다.

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

void main()
{
int i, j;
int nRow=5, nCol=4;
int **aNum;

// 유동 할당하기
aNum = (int **)malloc(nRow * sizeof(int *));
for(i=0; i<nRow; ++i)
{
aNum[i] = (int *)malloc( nCol * sizeof(int) );
for(j=0; j<nCol; ++j) aNum[i][j] = 0;
}

// 결과 출력하기
for(i=0; i<nRow; ++i)
{
for(j=0; j<nCol; ++j) printf("%d", aNum[i][j]);
printf("\n");
}

// 할당 해제하기
for(i=0; i<nRow; ++i) free(aNum[i]);
free(aNum);

}

  실행하면 다음처럼 결과가 출력된다.

    0000
    0000
    0000
    0000
    0000

  malloc() 대신 calloc()를 써서 위와 똑같은 결과를 낼 수 있다.
#include <stdio.h>
#include <stdlib.h>

void main()
{
int i, j;
int nRow=5, nCol=4;
int **aNum;

// 메모리 할당하기
aNum = (int **)calloc(nRow, sizeof(int *));
for(i=0; i<nRow; ++i)
{
aNum[i] = (int *)calloc( nCol, sizeof(int) );
}

// 결과 출력하기
for(i=0; i<nRow; ++i)
{
for(j=0; j<nCol; ++j) printf("%d", aNum[i][j]);
printf("\n");
}

// 할당 해제하기
for(i=0; i<nRow; ++i) free(aNum[i]);
free(aNum);

}

  0을 대입하는 구문이 빠진 이유는 calloc()가 할당한 공간의 값을 0(null)으로 채워서 굳이 필요하지 않기 때문이다.
글 걸기 주소 : 이 글에는 글을 걸 수 없습니다.

덧글을 달아 주세요

  1. 배경환 2010/07/28 10:10 고유주소 고치기 답하기

    초보학생입니당,ㅎ

    2차원배열 동적메모리할당..

    아 조금 더 생각해볼걸그랬네영,,ㅠㅎㅎ

    잘봤습니당..ㅎㅎㅎㅎ

    • 팥빙산 2010/07/30 13:52 고유주소 고치기 답하기

      처음 배울 때는 왜 이리 복잡하게 할당하는지 몰랐는데,
      이렇게 해야 기억 공간을 메모리 한계까지 쓸 수 있는 걸 알면서부터 잘 써먹고 있네요.^^

  2. 마크 2014/05/14 01:58 고유주소 고치기 답하기

    감사합니다.
    구글 열심히 뒤졌는데 제대로 된 소스 하나 찾았네요 ㅠㅠ
    잘 읽고 갑니다