Provided by:
manpages-ko_20050219-2_all 
void *malloc(size_t size);
void free(void *ptr);
void *realloc(void *ptr, size_t size);
배오위한 메모리를 할당하고 할당된 메모리에 대한 포인터를 반환한다.
메모리는 0 으로 설정된다.
malloc() 함수는 size 바이트를 할당하고 할당된 메모리에 대한 포인터를
할당한다. 메모리를 클리어하지 않는다.
free() 는 malloc(), calloc() 또는 realloc() 에 대한 호출시 반환되는 ptr
이 가리키는 메모리 공간을 해제한다. 그렇지 않고, 만일 free(ptr) 가
전에 이미 호출되었다면, 정의되지 않은 행동이 일어낫 만일 ptr 이 NULL
이라면, 어떤 작동도 행해지지 않는다.
realloc() 함수는 ptr 이 가리키는 메모리 블럭의 크기를 size 바이트로
바꾼다. 내용은 예전의 최소 크기에새 크기로 바뀌지 않는다. 새롭게
할당된 메모리는 초기홴프않는다. 만일 ptr 이 NULL 이라면, 호출은 mal-
loc(size) 과 동일하다; 만일 크기가 0 이라면, 호출은 free(ptr) 와
동일하다. 만약 ptr 이 NULL 이 아니라면, 이 함수는 malloc(), calloc()
이나 realloc() 에 대한 초기 호출시 반환되어야 한다.
이것은 어떤 종류의 변수를 위해 적당히 정렬된다. 만일 요구가 실패하면,
NULL 이 반환된다.
free() 는 어떤 값도 반환하지 않는다.
realloc() 은 새로 할당된 메모리를 가리키는 포인터를 반환하며 이
메모리는 어떤 종류의 변수를 위해 적당히 정렬되며 ptr과는 다를 것이다.
그렇지 않고, 만일 요구가 실패하거나 크기가 0 이라면 NULL 을 반환한다.
만일 realloc() 이 실패한다면 원래 블럭은 건드리지 않고 남아있다 --
해제되거나 이동되지 않는다.
그리고 realloc() 을 요구한다. Glibc는 이렇게 설정된 것으로 생각된다.
(그리고 이 루틴들의 glibc 버전은 이것을 한다); 만일 여러분이 errno를
설정하지 않는 개인적인 malloc 수행을 사용한다면, 라이브러리 루틴들은
errno를 가지는 것 없이 이유없이 실패할 것이다.
malloc(), free() 또는 realloc() 함수에 크래쉬는 할당된 영역의 오버
플로우나 같은 포인터를 두번 해제 하는 것과 같은 힙 오염과 항상 관련이
있다.
Linux libc (5.4.23 이후)의 최근 버전과 GNU libc (2.x) 버전은 환경
변수를 통해 조정할수 있는 malloc 수행을 포함한다. MALLOC_CHECK_ 이
설정되었다면, 특별한 (덜 효율적이지만) 행동이 행해지며, 이것은 같은
인자를 가지고 free() 를 두번 호출하거나 단일 바이트(off-by-one 버그)의
초과 같은 간단한 에러에 대한 안전을 위해 디자인되었다. 그러나 그런
에러들은 항상 보호되지는 않으며 메모리 누수가 생길 수 있다. 만일 MAL-
LOC_CHECK_ 을 0 으로 설정하면, 발견된 힙 오염은 무시된다; 만일 1 로
설정하면, 진단은 stderr로 출력된다; 만일 2 로 설정하면, abort() 가 즉시
호출된다. 이것은 유용하다. 왜냐하면 크래쉬가 나중에 생길것이고 문제의
원인을 찾아가는것이 매우 어려워지기 때문이다.
한글 Manpage 프로젝트 (http://man.kldp.org) 2005년 2월 15일