Programming/자료구조
[자료구조] 09. 동적 메모리 할당
happy_jinsu
2021. 10. 29. 22:52
동적 메모리 (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언어로 쉽게 풀어쓴 자료구조>