void *calloc(size_t
nmemb, size_t size);
void *malloc(size_t size);
malloc과 calloc의
prototype은 위와 같습니다.
malloc은
size만큼의 메모리를 확보한 후에, 그 시작 주소를 리턴합니다.
calloc은
nmemb*size만큼의 메모리를 확보한 후에, 그 영역을 모두 0으로 초기화 하고
시작 주소를 리턴합니다.
calloc같은 건
배열을 위한 메모리를 확보할 때 좀 더 편리하게 사용할 수 있는
함수입니다.
하지만
malloc으로 못 할 건 없겠지요. ^^
아래 둘은 그
결과가 똑같습니다.
1. b = (int*)
calloc(n, sizeof(int));
2. b = (int*)
malloc(n * sizeof(int)); memset(b, 0, n*sizeof(int));
malloc으로 했을
때, memset(b, 0, n*sizeof(int)) 부분이 없다면, b가 가리키고 있는 메모리
영역에는 쓰레기 값이 들어가 있습니다. b[0]에만 들어가 있는 것이 아니라,
할당된 메모리 영역 전체에 이전에 누군가 썼던 내용이 그대로 들어 있단
말이지요.