동적 메모리 (Dynamic Memory) 할당
▶ 프로그램의 실행 도중에 Heap 영역으로부터 메모리를 할당받는 것.
▶ 필요한 만큼만 할당 받고, 사용 후 반납하기 때문에 효율인 메모리 사용 가능.
▶ 동적 메모리를 다 사용한 후, free함수로 해제 필수.
main()
{
int *DM;
DM = (int *)malloc(sizeof(int)); //동적 메모리 할당
---
*** //동적 메모리 사용
---
free(DM); //동적 메모리 반납. 필수!!!
}
▷ malloc(5*sizeof(int));
→ 5 : 필요한 수만큼 곱하기
→ sizeof(int) : 4byte.
▶ 활용 예제
▷ 전형적인 동적 메모리 할당
//malloc을 이용하여 정수 10개를 저장할 수 있는 동적 메모리를 할당하고 free를 이용하여 메모리를 반납.
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
int main(void)
{
int i, *p;
p = (int *)malloc(SIZE*sizeof(int)); // Heap영역에서 40byte를 빌린다. (동적 메모리 할당)
if(p==NULL)
exit(1); //동적 할당 실패
for(i = 0; i < SIZE; i++)
p[i] = i;
for(i = 0; i < SIZE; i++)
printf("%d ",p[i]);
free(p); //동적 할당 해제
return 0;
}
//실행 결과 = 0 1 2 3 4 5 6 7 8 9
▷ 구조체 타입의 포인터 변수가 들어간 동적 메모리 할당
≫ (*p).a 와 p→ a는 동일한 표현이다. (후자를 주로 사용)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct information{
char name[10];
int age;
double height;
}Inform;
int main(void)
{
Inform *p;
p = (Inform *)malloc(sizeof(Inform)); // 동적 할당
if(p==NULL)
exit(1); // 동적 할당 실패
strcpy(p->name,"Lee"); // p->name은 (*p).name과 같음.
p->age;
free(p);
return 0;
}
참고 서적 : <C언어로 쉽게 풀어쓴 자료구조>
'Programming > 자료구조' 카테고리의 다른 글
[자료구조] 11. 중위(Infix), 전위(Prefix), 후위(Postfix), 수식 표기법 (0) | 2021.11.01 |
---|---|
[자료구조] 10. 스택 (Stack) (0) | 2021.10.30 |
[자료구조] 08. 포인터 (0) | 2021.10.27 |
[자료구조] 07. 배열과 구조체 (0) | 2021.10.26 |
[자료구조] 06. 재귀 (Recursion) (0) | 2021.10.23 |