[C언어] 2차원 배열을 유동 할당/해제하는 예제
무른연모/C, C++
2009/05/22 17:41
이중 포인터로 2차원 배열을 유동 할당(동적 할당)할 수 있다. 다음은 이중 포인터 **aNum에 크기가 5*4인 정수형 2차원 배열을 할당하고, 값을 0으로 채워서 결과를 확인하는 예제이다.
실행하면 다음처럼 결과가 출력된다.
0000
0000
0000
0000
0000
malloc() 대신 calloc()를 써서 위와 똑같은 결과를 낼 수 있다.
0을 대입하는 구문이 빠진 이유는 calloc()가 할당한 공간의 값을 0(null)으로 채워서 굳이 필요하지 않기 때문이다.
#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)으로 채워서 굳이 필요하지 않기 때문이다.
덧글을 달아 주세요
배경환 2010/07/28 10:10 고유주소 고치기 답하기
초보학생입니당,ㅎ
2차원배열 동적메모리할당..
아 조금 더 생각해볼걸그랬네영,,ㅠㅎㅎ
잘봤습니당..ㅎㅎㅎㅎ
팥빙산 2010/07/30 13:52 고유주소 고치기 답하기
처음 배울 때는 왜 이리 복잡하게 할당하는지 몰랐는데,
이렇게 해야 기억 공간을 메모리 한계까지 쓸 수 있는 걸 알면서부터 잘 써먹고 있네요.^^
마크 2014/05/14 01:58 고유주소 고치기 답하기
감사합니다.
구글 열심히 뒤졌는데 제대로 된 소스 하나 찾았네요 ㅠㅠ
잘 읽고 갑니다