레벨 2 C의 malloc 함수와 calloc 함수의 차이점
malloc()과 calloc() 함수는 모두 메모리 공간을 동적으로 할당하는 데 사용할 수 있지만 둘 사이에는 약간의 차이가 있습니다.
malloc() 함수에는 할당할 메모리 공간의 크기인 하나의 매개변수가 있습니다:
void
*malloc(size_t
size);
calloc() 함수에는 두 개의 매개변수, 즉 요소 수와 각 요소의 크기가 있습니다. 이 두 매개변수의 곱은 메모리 공간의 크기입니다. 할당됨.
void
*calloc(size_t
numElements,
size_t
sizeof
(Element));
호출이 성공하면 malloc() 함수와 calloc() 함수 모두 할당된 메모리 공간의 첫 번째 주소를 반환합니다.
malloc() 함수와 calloc() 함수의 주요 차이점은 전자는 할당된 메모리 공간을 초기화할 수 없지만 후자는 초기화할 수 있다는 것입니다.
malloc() 함수에 의해 할당된 메모리 공간이 이전에 사용되지 않은 경우, 그 안의 각 비트는 반대로 0일 수 있습니다. 메모리의 이 부분이 이전에 할당된 경우에는 일부가 남아 있을 수 있습니다. 그 안에는 모든 종류의 데이터가 있습니다. 즉, malloc() 함수를 사용하는 프로그램은 처음에는 정상적으로 실행되지만(메모리 공간이 재할당되지 않음) 일정 시간이 지나면(메모리 공간이 재할당됨) 문제가 발생할 수 있다.
calloc() 함수는 할당된 메모리 공간의 모든 비트를 0으로 초기화합니다. 즉, 문자 유형 또는 정수 유형의 요소에 메모리를 할당하면 이러한 요소는 초기화되도록 보장됩니다. 0으로; 포인터 유형 요소에 메모리를 할당하면 이러한 요소는 일반적으로 널 포인터로 초기화됩니다. 실제 데이터에 메모리를 할당하면 이러한 요소는 부동 소수점 0으로 초기화됩니다.