언어/C&C++ 응용

[C] 메모리 동적 할당

차가운오미자 2021. 6. 14. 17:55

 

 

 

동적 메모리 할당: 함수가 호출될 때마다 새로 할당되고, 함수를 빠져나가도 유지되는 변수

 

 

malloc, free 정의

#include <stdlib.h>
void* malloc(size_t size); //힙 영역 메모리 할당, 해당 메모리 주소값 반환, 실패 시 NULL반환
void free(void* ptr); // 힙 영역 할당된 메모리 공간 해제

* 선언방식

int *ptr_i = (int*)malloc(sizeof(int));
double* ptr_da = (double*)malloc(sizeof(double)*9; // 배열처럼

 

- type casting 하지 않으면 해당 메모리에 저장 불가능함!

- malloc은 실패 시 NULL을 반환하므로, 메모리가 배당되었는지 확인하는 코드를 작성해야 한다.

- 동적 할당 된 메모리는 프로그램 종료 시 운영체제에 의해 다 삭제되지만, 프로그램이 길어질 경우 더 이상 사용하지 않는 동적 할당 메모리는 free 해줘야 메모리 공간 부족 사태 방지 가능

 

 

calloc

#include <stdlib.h>
void* calloc(size_t elt_count, size_t elt_size); //성공시 메모리 주소값 반환 실패시 null반환

 

- elt_count: 할당할 블록의 갯수

- elt_size: 블록 하나당 바이트 크기의 정보

* malloc이 쓰레기값을 채우는 것과 다르게 비트를 0으로 초기화

- 당연 free 필요

realloc

#include <stdlib.h>
void* realloc(void* ptr, size_t size);

ptr이 가리키는 메모리 크기를 size 크기로 조절해라 (확장)

반환하는 주소값이 기존 것과 같을 수도, 다를 수도 (뒤에 여부 메모리 공간이 있느냐에 따라)