안녕하세요.
배열처럼 사용할 변수를 미리 넉넉하게 할당해두고, 사용할 수도 있지만,
메모리를 얼마나 사용할지 모르는 상황에 있을 때, 미리 너무 많이 선언에 놓으면 메모리 낭비가 일어날 수 도 있습니다.
이럴 때 동적으로 메모리를 할당하여 사용할 수 도 있습니다.
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함수를 통해 동적할당 개수를 입력 받은 후 개수 만큼 입력 받은 후 출력을 해줍니다.
'개발공부 > C언어&C++' 카테고리의 다른 글
[C언어&C++] 특정 폴더 경로의 파일리스트 받아오기(파일리스트를 파일로저장) (0) | 2020.08.31 |
---|---|
[C언어&C++] for문을 이용한 별찍기 (0) | 2020.03.10 |
[C언어&C++] strstr 함수(문자열 검색 함수) (0) | 2020.03.08 |
[C언어&C++] strchr 함수(문자 검색 함수) (0) | 2020.03.07 |
[C언어&C++] strlen 함수(문자열 길이 함수) (0) | 2020.03.06 |