동적 메모리 할당
동적 메모리 할당
malloc 함수
- 동적으로 메모리를 할당하는 함수 (힙 영역에 메모리를 할당)
#include <stdlib.h>
void* malloc(size_t size) //malloc 함수의 원형
- 할당한 메모리의 주소(첫 번째 바이트의 주소)를 리턴, 실패시 NULL 리턴
void* 인 이유
- malloc은 메모리 할당 함수이기 때문에
개발자가 어떠한 데이터 형(float, int, double 등)을 저장할지 예측 불가
따라사 알맞은 용도로 변환하여 사용 할 수 있도록 void 사용
ex)
int *i = (int *) malloc (sizeof(int));
- malloc(sizeof(int)) == 힙 영역에 4바이트 할당 받는다.
- (int *) == void * 가 int * 형으로 변환
- int * 가 *i 에 대입
free 함수
- 힙 영역에 할당된 메모리를 해제하는 함수
#include<stdlib.h>
void* free(void* ptr) //free 함수의 원형
calloc 함수
#include<stdlib.h>
void* calloc(size_t elt_count, size_t elt_size) //calloc 함수 원형
- calloc 함수는 elt_size 크기의 변수를 elt_count개 만큼 저장 할 수 있는 메모리 공간을 할당 하라는 의미를 갖는다.
malloc 함수와 calloc함수의 차이점
malloc은 할당된 공간의 값을 바꾸지 않는다.
calloc은 할당된 공간의 값을 모두 0으로 초기화 한다.
realloc함수
-이미 할당한 공간의 크기를 바꿀 때 realloc 함수를 사용한다.
#include<stdlib.h>
void* realloc(void* memblock, size_t size); //realloc 함수의 원형
-realloc은 이미 할당한 포인터 변수를 memblock에 넣고 바꾸고 싶은 공간의 크기를 size에 입력하여 사용한다.