안녕하세요.
배열처럼 사용할 변수를 미리 넉넉하게 할당해두고, 사용할 수도 있지만,
메모리를 얼마나 사용할지 모르는 상황에 있을 때, 미리 너무 많이 선언에 놓으면 메모리 낭비가 일어날 수 도 있습니다.
이럴 때 동적으로 메모리를 할당하여 사용할 수 도 있습니다.
malloc
함수 원형
void* malloc(size_t _Size);
헤더 파일
stdlib.h
리턴값
void* 형은 어떤 타입으로도 변화되므로, 포인터 값만 가진 변수정도로 이해하면 좋을 것 같습니다.
리턴 받은 포인터로 필요한 타입( 예:pCh = (char*)malloc(sizeof(char)*5); )으로 캐스팅한 후 사용하면 됩니다.
설명
필요한 크기를 동적으로 할당하여 사용합니다.
데이터 크기에 맞춰서 할당해줘야 하므로
"(데이터타입*)malloc(sizeof(데이터타입)*할당크기);"형식으로 할당합니다.
할당 메모리는 반드시 free함수를 통해 메모리 해제를 해야합니다.
free
함수 원형
void malloc(void* _Block);
헤더 파일
stdlib.h
리턴값
리턴값은 없습니다.
설명
malloc함수로 동적한 메모리를 해제할 떄 사용합니다.
예제
1. malloc과 free 사용 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <stdio.h> #include <stdlib.h> void main() { int* pPoint; pPoint = (int*)malloc(sizeof(int)*5); pPoint[0] = 25; pPoint[1] = 45; pPoint[2] = 50; pPoint[3] = 70; pPoint[4] = 99; int i = 0; for ( i = 0; i < 5; i++ ) printf("pPoint[%d] : %d\n", i, pPoint[i]); free(pPoint); } | cs |
결과값
설명
malloc함수를 이용해 int형으로 5개를 할당하였습니다.
배열과 같은 형식을 대괄호로 접근 가능합니다.
free함수를 통해 할당해제를 해야합니다.
2. 할당할 사이즈를 입력받아 동적할당하는 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> void main() { int* pPoint; int nCount = 0; printf("malloc size ?? "); scanf("%d", &nCount); pPoint = (int*)malloc(sizeof(int) * nCount); int i = 0; for (i = 0; i < nCount; i++) { printf("input pPoint[%d] : ", i); scanf("%d", &pPoint[i]); } for (i = 0; i < nCount; i++) printf("Output pPoint[%d] : %d\n", i, pPoint[i]); free(pPoint); } | cs |
결과값
설명
scanf함수를 통해 동적할당 개수를 입력 받은 후 개수 만큼 입력 받은 후 출력을 해줍니다.