반응형

안녕하세요.

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

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

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

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함수를 통해 동적할당 개수를 입력 받은 후 개수 만큼 입력 받은 후 출력을 해줍니다.

반응형

+ Recent posts