table of contents
other versions
- stretch 0.8.3-1
| 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 usingmalloc() 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¶
Thereallocarray() 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.
| May 1, 2014 | Linux 4.9.0-9-amd64 |