반응형
동적 할당이란?
- 프로그램 실행 중 필요한 메모리 공간을 할당
- 중요한 것은 동적으로 메모리를 할당할 대 Heap(힙) 영역에 할당을 하는 것입니다.
- 성공 : 할당한 메모리의 첫 번째 주소 리턴
- 실패 : NULL 리턴
헤더 파일 - <stdlib.h>
메모리 할당 함수 - malloc
메모리 할당 및 초기화 - calloc
메모리 추가 할당 - realloc
메모리 해제 함수 - free
2) 함수 원형
void *malloc(size_t size);
할당받을 메모리 크기를 인자로 받음
ex) int * arr = (int *) malloc(sizeof(int) * n );
* 인자의 개수가 n개의 배열을 동적 할당한다.
void *calloc(size_t nelem, sizeo_t elsize);
첫 번째 인자 배열 요소 갯수, 두번째 인자 각 배열요소 사이즈
할당된 메모리 0으로 초기화
void *realloc(void *ptr, size_t size);
이미 할당받은 메모리에 추가로 메모리 할당, 이전 메모리 주소는 사라짐
void free(void * ptr);
할당된 메모리를 해제한다.
할당한 메모리를 제대로 해제해주지 않으면, 메모리 누수가 발생할 수 있음
free(arr); //malloc으로 메모리를 할당한 메모리를 해제한다.
동적 할당 예제 1
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i,arr[4] = { 4, 3, 2, 1};
int* pArr;
pArr = (int *)malloc(sizeof(int) * 4); //int type에 * 4 만큼의 메모리를 할당
if(pArr == NULL)
{
printf("동적 할당 실패!!");
}
for(i = 0; i < 4; i++)
{
pArr[i] = arr[i];
}
for(i = 0; i < 4; i++)
{
printf("%d \n", pArr[i]);
}
free(pArr);
return 0;
}
|
동적 할당 예제 2
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, num;
printf("저장할 정수에 갯수를 입력하세요 : ");
scanf("%d", &num);
if(num == 0)
{
printf("zero를 입력하셨습니다. ");
return 0;
}
//입력 받을 정수 만큼 메모리 동적 할당
int* pArr = (int *)malloc(sizeof(int)* num);
//동적 할당 실패/성공 판단
if(pArr == NULL)
{
printf("동적 할당 실패!!");
exit(1);
}
//정수 입력
for(i = 0; i < num; i++)
{
printf("%d번째 입력 : ", i+1);
scanf("%d", &pArr[i]);
}
printf("\n");
//정수 출력
for(i = 0; i < num; i++)
{
printf("%d번째 정수 : %d\n", i + 1, pArr[i]);
}
//동적 할당 해제
free(pArr);
return 0;
}
'study > C언어' 카테고리의 다른 글
포인터 배열과 배열 포인터에 대한 이해 (0) | 2020.06.29 |
---|---|
define 매크로와 inline 함수 (0) | 2020.06.29 |
WIN API [GetVolumeInformation() 함수] (0) | 2020.04.08 |
구조체 정리 (0) | 2020.04.02 |
[c언어] 입출력 정리 (0) | 2020.04.02 |