table of contents
| 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¶
HISTORY¶
reallocarray() appeared in
OpenBSD 5.6, glibc 2.26.
| May 1, 2014 | Linux 6.17.3-1-default |