동적 할당을 통해서 다중 배열을 만들 수 있다.
첫 번째로 배열 동적 할당을 하고, 동적 할당을 배열 요소에 다음 동적 할당을 받는다. 그림으로 표현하면 다음과 같다.
[2차원]
#include <stdio.h>
#include <stdlib.h>
void fillArr(int **arr, int row, int col) {
int i, j;
for(i = 0; i < row; i++) {
for(j = 0; j < col; j++) arr[i][j] = i*col + j;
}
}
int main() {
int ** arr;
int i, j, row = 3, col = 2;
// 행 생성하기
arr = (int **)malloc(row * sizeof(int *));
if(!arr) {
printf("error malloc1\n"); return 0;
}
// 열 생성하기
for(i = 0; i < row; i++) {
arr[i] = (int *)malloc(col * sizeof(int));
if(!arr[i]) {
printf("error malloc2\n"); return 0;
}
}
// 배열에 값 넣기
fillArr(arr, row, col);
// 베열 출력하기
for(i = 0; i < row; i++) {
for(j = 0; j < col; j++) printf("%d ", arr[i][j]);
printf("\n");
}
// 동적 할당 해제하기 (열부터 진행)
for(i = 0; i < row; i++) {
free(arr[i]);
}
// 동적 할당 해제하기 (행 진행)
free(arr);
return 0;
}
[3차원]
#include <stdio.h>
#include <stdlib.h>
// 3차원 배열에 값 채우는 함수
void fill3DArray(int ***arr, int depth, int row, int col) {
int i, j, k;
for (i = 0; i < depth; i++) {
for (j = 0; j < row; j++) {
for (k = 0; k < col; k++) {
arr[i][j][k] = i * row * col + j * col + k;
}
}
}
}
int main() {
int ***arr;
int i, j, k;
int depth = 3, row = 2, col = 5;
// 깊이 할당 (Depth 생성)
arr = (int ***)malloc(depth * sizeof(int **));
if (!arr) {
printf("Error allocating depth\n");
return 0;
}
// 행 할당 (Row 생성)
for (i = 0; i < depth; i++) {
arr[i] = (int **)malloc(row * sizeof(int *));
if (!arr[i]) {
printf("Error allocating row\n");
return 0;
}
}
// 열 할당 (Column 생성)
for (i = 0; i < depth; i++) {
for (j = 0; j < row; j++) {
arr[i][j] = (int *)malloc(col * sizeof(int));
if (!arr[i][j]) {
printf("Error allocating column\n");
return 0;
}
}
}
// 배열에 값 채우기
fill3DArray(arr, depth, row, col);
// 배열 출력하기
for (i = 0; i < depth; i++) {
printf("Depth %d:\n", i);
for (j = 0; j < row; j++) {
for (k = 0; k < col; k++) {
printf("%d ", arr[i][j][k]);
}
printf("\n");
}
printf("\n");
}
// 메모리 해제 (Column부터 해제)
for (i = 0; i < depth; i++) {
for (j = 0; j < row; j++) {
free(arr[i][j]);
}
free(arr[i]);
}
free(arr);
return 0;
}
[출력]
Depth 0:
0 1 2 3 4
5 6 7 8 9
Depth 1:
10 11 12 13 14
15 16 17 18 19
Depth 2:
20 21 22 23 24
25 26 27 28 29
'2학년 2학기 > c언어' 카테고리의 다른 글
14-2장 함수 매크로 (0) | 2024.12.02 |
---|---|
14-1장 전처리기와 단순 매크로 (0) | 2024.12.02 |
13-11장 Wild pointer (0) | 2024.11.26 |
13-10장 Dangling pointer (0) | 2024.11.26 |
13-9장 메모리 누수(3)_먼저 할당된 메모리 주소를 해제를 한 경우 (0) | 2024.11.26 |