'Do', or 'do not'.
There is no 'try'.


Since 2008.05.01

본문

Hobby?

[C언어] 다중 배열 동적할당

2017. 10. 10. 21:39

C언어에서는 코드 중간에 원하는 크기의 배열을 할당(동적할당)하는 것이 다른 언어들과 달리 쉽지 않다.

이에 C언어에서는 포인터를 이용하여 동적할당을 할 수 있는데, 다중 배열을 하려면 좀 머리가 아픈 경우가 많다.


이에, 저장용 겸으로 방법을 적어 본다.


보통 동적 할당을 하면 아래와 같은 예제들이 나온다.


하지만, 위 예제는 1차원 동적할당이며, 다중 배열의 경우는 보통 2차원까지만 아래와 같이 나온다.


위 예제와 같이 한다면, 다차원이 될수록 배열 할당 해제시에 for문이 추가로 돌아야 하는 문제점과 각 배열의 주소 연속성을 보장하지 못하는 문제[각주:1]가 발생할 수 있다.


이에 아래와 같은 방법을 권장해본다.

참고로 아래의 방법은 포인터의 개념을 이용한 테크닉을 사용한 방법이다.

이 방식을 이용하면, 배열 할당 해제를 매우 쉽게 할 수 있으며, 실제 작업시 배열의 주소가 연속[각주:2]되어 있어 작업시 약간의 시간이익을 얻을 수 있다.

다만, 다차원 배열 할당시 차원이 올라갈수록 띄어야 하는 공간의 크기를 정확히 계산해야 하는 문제가 생기긴 한다.


  1. 위 예제의 최종 배열인 arr[5][10] 배열의 경우 arr[0][9]와 arr[1][0] 배열의 주소가 연속되지 않을 수 있다. 이는 시스템에서 해당 자료를 로딩하는데, 속도 지연이 생길 수 있다. [본문으로]
  2. 전체 배열 크기의 1차원 배열을 할당하여, 다차원 배열처럼 쓰는 방법이므로, 주소가 연속되어 있다. [본문으로]

태그

댓글

댓글 열기