반응형

1_1.cpp
0.00MB

c언어에서 2차원배열을 만드는 방법은 이와 같습니다. 

arr[3][3] = {0, };

그러면 3X3 2차원 배열이 생성됩니다.

하지만 가로의 크기와 세로의 크기를 컴파일 이전 시간에 미리 정해줘야 합니다.

즉, 가로 안에 상수가 들어가야합니다. 

만약 실행 도중에 사용자가 원하는 크기만큼의 배열을 만들고 싶으면 어떻게 해야할까요?

2차행렬 동적할당

아마 가장 보편적으로 알려져 있는 방법입니다.

 

scanf("%d", column);

scanf("%d", row);

 

int **arr;
arr = (int**) malloc ( sizeof(int*) * column);
for(int i=0; i<column; i++){
    arr[i] = (int*) malloc ( sizeof(int) * row );
}

 

하지만 문제점이 하나 있습니다.

 

만약 주소를 찍으면 어떻게 될까요?

for(int i=0; i<column; i++){

     for(int j=0; row; j++){

          printf("%d  ", &arr[i][j]);  

      }

      printf("\n");

}

 

 

행으로는 포인터가 4바이트로 연결 되지만, 다음 열로 새로운 시작주소를  받습니다.

 arr[0][], arr[1][], arr[2][]의 값에 접근할 때마다 시작주소가 바뀌어 불필요한 동작을 일으킵니다. 

이제 다음 동적할당 예제로는 하나의 시작주소로 시작해 순차적으로 카운트되도록 만들어 보겠습니다.  

 

메모리 공간을 사용했으면 이제 해제해줍니다.

for (i = 0; i < row; i++) {

     free(arr[i]);

     }

free(arr);

728x90
반응형

+ Recent posts