1 #include <stdio.h>   2 #include <stdlib.h>   3 #include < string .h>   4   5 int ** alloc_dyn_array( int  n...

[C언어 정복 리얼 교과서] Chapter 16. 더블 포인터. 예제

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4
  5 int** alloc_dyn_array(int nRow, int nCol);
  6 void print_array(int** ppResult, int nRow, int nCol);
  7 void free_dyn_array(int** ppResult, int nRow);
  8
  9 int** alloc_dyn_array(int nRow, int nCol)
 10 {
 11     int** ppResult = NULL;
 12     int i = 0;
 13     if (nRow > 0 && nCol > 0)
 14     {
 15         ppResult = (int**)malloc(sizeof(int*) * nRow);
 16         if (NULL != ppResult)
 17         {
 18             for (i = 0; i < nRow; i++)
 19             {
 20                 ppResult[i] = (int *)malloc(sizeof(int)* nCol);
 21                 if (NULL != ppResult[i])
 22                 {
 23                     memset(ppResult[i], 0sizeof(int)* nCol);
 24                 }
 25                 else
 26                 {
 27                     int j=0;
 28                     for (i = 0; j < i; j++)
 29                     {
 30                         free(ppResult);
 31                         ppResult[i] = NULL;
 32                     }
 33                     ppResult = NULL;
 34                     break;
 35                 }
 36             }
 37         }
 38     }
 39     else
 40     {
 41         printf("오류 : alloc_dyn_array() 매개변수 \n");
 42     }
 43     return ppResult;
 44 }
 45
 46 void print_array(int** ppResult, int nRow, int nCol)
 47 {
 48     int i = 0, j = 0;
 49     if (NULL != ppResult && nRow > 0 && nCol > 0)
 50     {
 51         for (i = 0; i < nRow; i++)
 52         {
 53             for (j = 0; j < nCol; j++)
 54             {
 55                 printf("%d", ppResult[i][j]);
 56             }
 57             printf("\n");
 58         }
 59     }
 60 }
 61
 62 void free_dyn_array(int** ppResult, int nRow)
 63 {
 64     int i = 0, j = 0;
 65     if (NULL != ppResult && nRow > 0)
 66     {
 67         for (i = 0; i < nRow; i++)
 68         {
 69             if (NULL != ppResult[i])
 70             {
 71                 free(ppResult[i]);
 72             }
 73         }
 74         free(ppResult);
 75     }
 76 }
 77
 78 int main(void)
 79 {
 80     int row = 2, col = 3;
 81     int i = 0, j = 0;
 82     int **ppResult = NULL;
 83
 84     ppResult = alloc_dyn_array(row, col);
 85     if (NULL != ppResult)
 86     {
 87         printf("값 설정하기 이전 \n");
 88         print_array(ppResult, row, col);
 89
 90         printf("값 설정한 후: \n");
 91         ppResult[0][0] = 1;
 92         ppResult[0][2] = 2;
 93         ppResult[1][0] = 3;
 94         ppResult[1][2] = 4;
 95
 96         print_array(ppResult, row, col);
 97         free_dyn_array(ppResult, row);
 98     }
 99
100     return 0;
101 }


※ 동적 2차원 배열으로서, 행의 크기 nRow 변수와 열의 크기 nCol 변수를 이용하였고 alloc_dyn_array()함수는 2차원 배열을 메모리에 동적으로 할당받고
print_array() 함수는 할당받은 2차원 배열의 내용을 출력하며, free_dyn_array() 함수는 할당받았던 메모리를 해제한다.
이 챕터에서 가장 중요시 되는 것은
NULL != ( ) 매개변수 유효성 점검.
() = ()malloc(sizeof() * ) 배열 할당.
free() 메모리 해제

라고 생각이 된다.

0 개의 댓글: