2차원 배열의 동적할당
2차원 배열을 동적 할당하는 방법에 대해 알아보도록 하겠습니다.
메모리의 크기가 정해져있지 않고 두개의 숫자로 입력이 들어올 때를 기준으로 생각합니다.
입력에 5 5 등이 들어오는 방식입니다.
5 5를 입력으로 받았다면 5행 5열
3 7을 입력으로 받았다면 3행 7열
각 행과 열을 뜻합니다.
이는 입력으로 들어올 입력값이 몇개인지 미리 지정되어있지 않고, 입력에서 주어지는 값으로 동적 할당하여 세팅을 해야 하는 경우 필요합니다.
2차원 문자 배열의 동적 할당을 예로 설명하겠습니다.
int A,B;
scanf("%d %d",&A,&B);
char **arr; //char 더블포인터 선언
arr = (char**)malloc(sizeof(char*)*A); //A칸 동적할당
for (int i=0;i<A;i++){
arr[i] = (char*)malloc(sizeof(char)*B); //B칸 동적할당 후 A에 매치 (A번반복)
}
코드를 잠깐 설명하자면
B개의 문자를 저장할 수 있는 char 포인터가 A 개만큼있고 , 그 char 포인터를 가리키는 char 더블 포인터가 하나 있습니다.
그 더블포인터가 각각의 char 포인터를 가리킵니다.
예를 들면 좌측의 메모리가 char ** 포인터 arr이고 , A칸(포인터를 가리킬 수 있는 사이즈만큼 *A칸)의 메모리를 생성하였습니다.
그리고 이 생성된 arr을 arr[0]~ arr[A] 로 각각의 인덱스를 가리킬 수 있으며,
이 각각의 인덱스에 문자 B개를 저장하여 가르킬 수 있는 포인터를 생성하여 가리키게 합니다.
(B칸짜리 문자 포인터 생성 후 그 포인터를 가리키게 함)
이를 각각의 인덱스만큼 반복하여 생성하면 총
(A*B) 칸짜리 메모리를 동적 할당하였고 이를 가리키는 + A 칸짜리 메모리를 동적 할당하였습니다.
이후 마지막에 짝으로 꼭 해줘야 하는 필수과정이 있습니다.
for (int i=0; i<A;i++){
free(arr[i]);
}
free(arr);
이는 각각
의 char 포인터를 메모리 반납
이후 char ** 를 반납입니다.
미리 소스 마지막에 추가해두시기 바랍니다.
댓글로 요청사항 주시면 그에 맞게 소스 추가해드리겠습니다.