이 름
calloc, malloc, free, realloc − 동 적 메 모 리 할 당 및 해 제
사 용 법
#include <stdlib.h>
void
*calloc(size_t nmemb, size_t
size);
void *malloc(size_t size);
void free(void *ptr);
void *realloc(void *ptr, size_t
size);
설 명
calloc() 함 수 는 원 소 의 크 기 가 size 바 이 트 인 nmemb 개 의 원 소 로 이 루 어 진 배 열 을 위 한 메 모 리 를 할 당 하 고 할 당 된 메 모 리 에 대 한 포 인 터 를 반 환 한 다 . 메 모 리 는 0 으 로 설 정 된 다 .
malloc() 함 수 는 size 바 이 트 를 할 당 하 고 할 당 된 메 모 리 에 대 한 포 인 터 를 할 당 한 다 . 메 모 리 를 클 리 어 하 지 않 는 다 .
free() 는 malloc(), calloc() 또 는 realloc() 에 대 한 호 출 시 반 환 되 는 ptr 이 가 리 키 는 메 모 리 공 간 을 해 제 한 다 . 그 렇 지 않 고 , 만 일 free(ptr) 가 전 에 이 미 호 출 되 었 다 면 , 정 의 되 지 않 은 행 동 이 일 어 난 다 . 만 일 ptr 이 NULL 이 라 면 , 어 떤 작 동 도 행 해 지 지 않 는 다 .
realloc() 함 수 는 ptr 이 가 리 키 는 메 모 리 블 럭 의 크 기 를 size 바 이 트 로 바 꾼 다 . 내 용 은 예 전 의 최 소 크 기 에 서 새 크 기 로 바 뀌 지 않 는 다 . 새 롭 게 할 당 된 메 모 리 는 초 기 화 되 지 않 는 다 . 만 일 ptr 이 NULL 이 라 면 , 호 출 은 malloc(size) 과 동 일 하 다 ; 만 일 크 기 가 0 이 라 면 , 호 출 은 free(ptr) 와 동 일 하 다 . 만 약 ptr 이 NULL 이 아 니 라 면 , 이 함 수 는 malloc(), calloc() 이 나 realloc() 에 대 한 초 기 호 출 시 반 환 되 어 야 한 다 .
반 환 값
calloc() 그 리 고 malloc()함 수 에 서 , 반 환 값 은 할 당 된 메 모 리 를 가 리 키 며 , 이 것 은 어 떤 종 류 의 변 수 를 위 해 적 당 히 정 렬 된 다 . 만 일 요 구 가 실 패 하 면 , NULL 이 반 환 된 다 .
free() 는 어 떤 값 도 반 환 하 지 않 는 다 .
realloc() 은 새 로 할 당 된 메 모 리 를 가 리 키 는 포 인 터 를 반 환 하 며 이 메 모 리 는 어 떤 종 류 의 변 수 를 위 해 적 당 히 정 렬 되 며 ptr과 는 다 를 것 이 다 . 그 렇 지 않 고 , 만 일 요 구 가 실 패 하 거 나 크 기 가 0 이 라 면 NULL 을 반 환 한 다 . 만 일 realloc() 이 실 패 한 다 면 원 래 블 럭 은 건 드 리 지 않 고 남 아 있 다 -- 해 제 되 거 나 이 동 되 지 않 는 다 .
호 환
ANSI-C
관 련 항 목
주 의
Unix98 표 준 은 실 패 시 errno 를 ENOMEM으 로 설 정 하 도 록 malloc(), calloc(), 그 리 고 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 버 그 )의 초 과 같 은 간 단 한 에 러 에 대 한 안 전 을 위 해 디 자 인 되 었 다 . 그 러 나 그 런 에 러 들 은 항 상 보 호 되 지 는 않 으 며 메 모 리 누 수 가 생 길 수 있 다 . 만 일 MALLOC_CHECK_ 을 0 으 로 설 정 하 면 , 발 견 된 힙 오 염 은 무 시 된 다 ; 만 일 1 로 설 정 하 면 , 진 단 은 stderr로 출 력 된 다 ; 만 일 2 로 설 정 하 면 , abort() 가 즉 시 호 출 된 다 . 이 것 은 유 용 하 다 . 왜 냐 하 면 크 래 쉬 가 나 중 에 생 길 것 이 고 문 제 의 원 인 을 찾 아 가 는 것 이 매 우 어 려 워 지 기 때 문 이 다 .
번 역
정
강 훈 <skyeyes [AT] soback.net>
2001년 3월 11일
한 글 Manpage 프 로 젝
트 (http://man.kldp.org) 2005년 2월
15일