C++ 동적할당 해제 - c++ dongjeoghaldang haeje

안녕하세요.

배열처럼 사용할 변수를 미리 넉넉하게 할당해두고, 사용할 수도 있지만,

메모리를 얼마나 사용할지 모르는 상황에 있을 때, 미리 너무 많이 선언에 놓으면 메모리 낭비가 일어날 수 도 있습니다.

이럴 때 동적으로 메모리를 할당하여 사용할 수 도 있습니다.

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

결과값

C++ 동적할당 해제 - c++ dongjeoghaldang haeje

설명

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

결과값

C++ 동적할당 해제 - c++ dongjeoghaldang haeje

설명

scanf함수를 통해 동적할당 개수를 입력 받은 후 개수 만큼 입력 받은 후 출력을 해줍니다.