The function calloc
allocates memory and clears it to zero. It
is declared in stdlib.h.
void *
calloc (size_t count, size_t eltsize)
¶Preliminary: | MT-Safe | AS-Unsafe lock | AC-Unsafe lock fd mem | See POSIX Safety Concepts.
This function allocates a block long enough to contain a vector of
count elements, each of size eltsize. Its contents are
cleared to zero before calloc
returns.
You could define calloc
as follows:
void * calloc (size_t count, size_t eltsize) { void *value = reallocarray (0, count, eltsize); if (value != 0) memset (value, 0, count * eltsize); return value; }
But in general, it is not guaranteed that calloc
calls
reallocarray
and memset
internally. For example, if the
calloc
implementation knows for other reasons that the new
memory block is zero, it need not zero out the block again with
memset
. Also, if an application provides its own
reallocarray
outside the C library, calloc
might not use
that redefinition. See Replacing malloc
.