본문 바로가기
Programming/자료구조

[자료구조] 09. 동적 메모리 할당

by happy_jinsu 2021. 10. 29.

동적 메모리 (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언어로 쉽게 풀어쓴 자료구조>