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 |