1. 입력한 크기만큼의 2차원 배열을 동적할당한 후 곱셈연산해주는 프로그램

 

    1.1.1. Source Code

 

 

-----------------------------------------------------------------------------------------------

 

 

#define _CRT_SECURE_NO_WARNINGS

 

#include <stdio.h>

 

#include <stdlib.h>

 

#include <malloc.h>//_msize 함수 사용을 위하여 헤더파일 추가

 

 

 

void input_value(int** m, int iRow, int iCol);

 

 

 

void output_value(int** m, int iRow, int iCol);

 

 

 

int main(void)

 

{

 

        int iRow, iCol;

 

 

 

        int** pArray = NULL; //포인터를 초기화

 

 

 

        int i = 0;

 

        scanf("%d %d", &iRow, &iCol);

 

 

 

       

 

        pArray = malloc(sizeof(int*) * iRow); //이중포인터에 int 포인터의 크기 (4바이트) * iRow만큼 동적메모리 할당

 

 

 

        for (i = 0; i < iRow; i++)

 

        {

 

               pArray[i] = malloc(sizeof(int) * iCol);

 

        }

 

       

 

        printf("이중포인터가 갖는 메모리의 크기 %d\n", _msize(pArray)); //동적할당된 메모리의 크기를 구하기 위하여 _msize 함수를 사용하였음

 

        printf("포인터 하나가 갖는 메모리의 크기 %d\n", _msize(pArray[1]));//sizeof는 자료형의 크기나 변수의 크기를 구하는 연산자이기 때문에 포인터 변수는 무조건 4byte 값을 반환

 

        printf("int형 요소 하나가 갖는 메모리의 크기 %d\n", sizeof(pArray[1][1]));

 

 

 

        input_value(pArray,iRow, iCol);

 

 

 

        output_value(pArray, iRow, iCol);

 

 

 

        return 0;

 

}

 

 

 

void input_value(int** m, int iRow, int iCol) //주소값을 받아와서 곱셈연산

 

{

 

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

 

        {

 

               for (int j = 0; j < iCol; j++)

 

               {

 

                       m[i][j] = (i + 1) * (j + 1);

 

               }

 

        }

 

}

 

 

 

void output_value(int** m, int iRow, int iCol) // 연산값을 출력

 

{

 

        printf("\n");

 

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

 

        {

 

               for (int j = 0; j < iCol; j++)

 

               {

 

                       printf("%8.d ", m[i][j]);

 

               }

 

               printf("\n");

 

        }

 

}

 

 

-----------------------------------------------------------------------------------------------

 

1.1.2. Source Code 수정1

 

2020.02.24

- 변수선언부 초기화 (iRow,iCol)

- malloc 함수 사용시 void형이므로 형변환

- free 함수를 사용하여 할당된 동적메모리 해제

- 곱셈계산 함수 변수선언부 수정

-----------------------------------------------------------------------------------------------

 

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>//_msize 함수 사용을 위하여 헤더파일 추가

 

void input_value(int** m, int iRow, int iCol);

 

void output_value(int** m, int iRow, int iCol);

 

int main(void)

{

        int iRow = 0;

        int iCol = 0;

 

        int** pArray = NULL; //포인터를 초기화

 

        int i = 0;

 

        scanf("%d %d", &iRow, &iCol);

 

       

        pArray =(int**)malloc(sizeof(int*) * iRow); //이중포인터에 int 포인터의 크기 (4바이트) * iRow만큼 동적메모리 할당 malloc void 형 변수이기때문에 (int**) 로 형변환

 

        for (i = 0; i < iRow; i++)

        {

               pArray[i] = (int*)malloc(sizeof(int) * iCol);

        }

       

        printf("이중포인터가 갖는 메모리의 크기 %d\n", _msize(pArray)); //동적할당된 메모리의 크기를 구하기 위하여 _msize 함수를 사용하였음

        printf("포인터 하나가 갖는 메모리의 크기 %d\n", _msize(pArray[1]));//sizeof는 자료형의 크기나 변수의 크기를 구하는 연산자이기 때문에 포인터 변수는 무조건 4byte 값을 반환

        printf("int형 요소 하나가 갖는 메모리의 크기 %d\n", sizeof(pArray[1][1]));

 

        input_value(pArray,iRow, iCol);

 

        output_value(pArray, iRow, iCol);

 

        for (i = 0; i < iRow; i++)    // 세로 크기만큼 반복

        {

               free(pArray[i]);                // 2차원 배열의 가로 공간 메모리 해제

        }

 

        free(pArray);

 

        return 0;

}

 

void input_value(int** m, int iRow, int iCol) //주소값을 받아와서 곱셈연산

{

        int i = 0;

        int j = 0;

 

        for (i = 0; i < iRow; i++)

        {

               for (j = 0; j < iCol; j++)

               {

                       m[i][j] = (i+1 ) * (j+1 );

               }

        }

}

 

void output_value(int** m, int iRow, int iCol) // 연산값을 출력

{

        int i = 0;

        int j = 0;

 

        printf("\n");

        for (i = 0; i < iRow; i++)

        {

               for (j = 0; j < iCol; j++)

               {

                       printf("%8.d ", m[i][j]);

               }

               printf("\n");

        }

 

}

-----------------------------------------------------------------------------------------------

 

1.2. 실행 image

 

실행이미지 동적할당.png

 

-----------------------------------------------------------------------------------------------

 

1.3 동적할당

 

노트북 (12) (1).png