table of contents
MALLOC(3) | Library Functions Manual | MALLOC(3) |
NAME¶
reallocarray
—
memory allocation and deallocation
LIBRARY¶
library “libbsd”
SYNOPSIS¶
#include
<bsd/stdlib.h>
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.
May 1, 2014 | Debian |