Scroll to navigation

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 4.19.0-6-amd64