기본적으로
stdlib.h 헤더 파일을 불러와야 한다.
기본적인 함수의 구조는 다음과 같다.
void * malloc (size_t size); // size 만큼 동적 할당
int *pArray = (int *)malloc(sizeof(int)*5);
free(pArray);
int 크기 5만큼 동적할당을 한 뒤, 동적할당을 해제하였다.
2차원 배열의 동적할당 방법
#include <stdio.h>
#include <stdlib.h>
int main() {
int **pArray = (int **)malloc(sizeof(int *) * 5);
for (int i = 0; i < 5; i++) {
pArray[i] = (int *)malloc(sizeof(int) * 5);
}
// 데이터가 잘 들어갔는지 확인 작업
for (int i = 0; i < 5; i++) { // pArray i행 j열에 i+j 삽입
for (int j = 0; j < 5; j++) {
pArray[i][j] = i + j;
printf("%d\t", pArray[i][j]); // 출력
}
printf("\n");
}
// 동적 할당 해제
for (int i = 0; i < 5; i++) {
free(pArray[i]);
}
free(pArray);
}
여기서 주목해서 봐야 할 것은
int **pArray = (int **)malloc(sizeof(int *) * 5);
이다 int **pArray 이므로 그 안에 들어가는 데이터는 (int *) 형태이다.
그래서 동적할당을 (int *) 배수로 정해준다.
또한 (int *)형으로 각각 동적할당 된 데이터들 또한 동적 할당을 해줘야하는데,
for (int i = 0; i < 5; i++) {
pArray[i] = (int *)malloc(sizeof(int) * 5);
}
pArray[0]~pArray[4] 까지 돌면서 (int)형 * 5만큼의 크기를 동정할당 하였다.
2차원 포인터의 동적할당 해제는 동적할당 하는 순서의 역순이다.
for (int i = 0; i < 5; i++) {
free(pArray[i]);
}
free(pArray);
pArray[0]~pArray[4] 까지 돌면서 (int) * 5 만큼 동적할당 했던 것을 해제해주고,
마지막에 pArray 포인터의 동적할당을 해제해준다.