malloc()
- 동적으로 메모리를 할당하는 함수
- 정적 메모리 : 프로그램 컴파일 시 할당되며, 실행 중에 크기가 변경될 수 없음
- 동적 메모리 : 실행 중에 크기 변경 가능, 프로그램이 필요로 하지 않을 때는 메모리를 해제함
사용 예시
int* ptr;
ptr = (int*) malloc(10 * sizeof(int));
- 크기가
10 * sizeof(int)
바이트인 메모리를 할동하고, 할당된 메모리의 시작 주소를 ptr
포인터에 반환함.
calloc()
- malloc()과 비슷하지만 할당한 메모리를 모두 0으로 초기화하는 동적 메모리 할당 함수
- 2개의 인자를 받음. 첫 번째 인자는 할당할 요소의 개수, 두 번째 인자는 할당할 요소 하나의 크기
- 초기화하는 시간이 필요하기때문에 malloc보다 느릴 수 잇음
사용 예시
int* ptr;
ptr = (int*) calloc(n, sizeof(int));
- 크기가
n * sizeof
바이트인 메모리를 할당하고, 할당된 메모리를 모두 0으로 초기화함
realloc()
- 동적으로 할당된 메모리의 크기를 변경할 때 사용하는 함수
- 두 개의 인자를 받으며, 첫 번째 인자는 기존에 할당된 메모리의 포인터, 두번 째 인자는 새로운 메모리의 크기
- 반환값으로 새로운 메모리의 시작 주소를 반환(기존의 메모리 주소와 다를 수 있음)
사용 예시
int* ptr;
ptr = (int*) malloc(10 * sizeof(int));
ptr = (int*) realloc(ptr, 20 * sizeof(int));
- 새로운 크기의 메모리를 먼저 할당하고, 이전 내용을 새로운 메모리의 복사 후 이전 메모리를 해제함
free()
- 동적으로 할당된 메모리를 해제하는 함수
- malloc, calloc, realloc의 함수로 할당한 동적 메모리는 프로그램 종료 전 반드시 해제해줘야 함.
- 포인터를 인자로 받아 해당 포인터가 가리키는 메모리를 해제함(동적 메모리를 가르키는 포인터여야만 함)
사용 예시
int* ptr;
ptr = (int*) malloc(10 * sizeof(int));
free(ptr);