동적 메모리 할당 - malloc, calloc, realloc, free C/C++

메모리 할당: malloc(3)

#include

void*malloc(size_t size);//size: 할당받을메모리크기

malloc 함수는 인자로 지정한 크기의 메모리를 할당하는 데 성공하면 메모리의 시작 주소를 리턴한다. 만약 메모리 할당에 실패하면 NULL 포인터를 리턴한다. 인자로 지정하는 메모리 크기는 바이트 단위다. 할당된 메모리에는 어떤 형태의 데이터도 저장할 수 있다. 주의할 점이 있는데 malloc 함수는 할당된 메모리를 초기화 하지 않는다. 다음은 malloc 함수를 사용해 문자 100개를 저장할 수 있는 메모리 할당하는 예다.

char*ptr;

ptr=malloc(sizeof(char) * 100);


 

메모리 할당과 초기화: calloc(3)

#include

void*calloc(size_t nelem, size_t elsize);

//nelem: 배열 요소의 개수, elsize: 각 배열 요소의 크기

calloc 함수는 nelem * elsize 바이트 배열을 저장할 메모리를 할당한다. calloc 함수는 할당된 메모리를 0으로 초기화한다. 다음은 길이가 20바이트인 요소 10개로 구성된 배열을 저장할 수 있는 메모리를 할당하는 예다.

char*ptr;

ptr=calloc(10,20);

 

 

메모리 추가 할당: realloc(3)

#include

void*realloc(void*ptr, size_t size);

//ptr: 할당받은 메모리를 가리키는 포인터, size: 할당할 메모리의크기

realloc 함수는 이미 할당받은 메모리에 추가로 메모리를 할당할 때 사용한다. realloc함수는 이전에 할당받은 메모리와 추가할 메모리를 합한 크기의 메모리를 새롭게 할당하고 주소를 리턴한다. 이전 메모리의 내용을 새로 할당된 메모리로 복사한다. 다음은 malloc으로 할당받은 메모리에 추가로 100바이트 메모리를 할당하는 에로, 새로운 메모리의 주소는 new 포인터에 저장된다. realloc 함수로 메모리를 새로 할당받으면 이전 메모리의 주소는 필요 없다.

char*ptr, *new;

ptr=malloc(sizeof(char) * 100);

new=realloc(ptr, 100);

 

 

메모리 해제: free(3)

#include

voidfree(void*ptr);

//ptr: 해제할 메모리 주소

free 함수는 사용을 마친 메모리를 해제하고 반납한다. free 함수가 성공하면 ptr이 가리키던 메모리는 더 이상 의미가 없다.

 

출처 : http://bestheroz.blog.me/113875486


덧글

댓글 입력 영역