reallocarray(3bsd)
| REALLOCARRAY(3bsd) | 3bsd | REALLOCARRAY(3bsd) |
NAME
reallocarray —
memory allocation and deallocation
LIBRARY
library “libbsd”
SYNOPSIS
#include
<stdlib.h> (See
libbsd(7) for include usage.)
void *
reallocarray(void
*ptr, size_t nmemb,
size_t size);
DESCRIPTION
When using
malloc()
be careful to avoid the following idiom:
if ((p = malloc(num * size)) == NULL) err(1, "malloc");
The multiplication may lead to an integer
overflow, which can be avoided using the extension
reallocarray(),
as follows:
if ((p = reallocarray(NULL, num, size)) == NULL) err(1, "malloc");
Alternatively
calloc() is
a more portable solution which comes with the cost of clearing memory.
If
malloc()
must be used, be sure to test for overflow:
if (size && num > SIZE_MAX / size) {
errno = ENOMEM;
err(1, "overflow");
}
The use of
reallocarray()
or calloc() is strongly encouraged when allocating
multiple sized objects in order to avoid possible integer overflows.
RETURN VALUES
The reallocarray() function returns a
pointer to the allocated space if successful; otherwise, a null pointer is
returned and errno is set to
ENOMEM.
SEE ALSO
malloc(3), calloc(3), alloca(3)
HISTORY
reallocarray() appeared in
OpenBSD 5.6, glibc 2.26.
| May 1, 2014 | Linux 6.12.85-6.12-alt1 |
