REALLOCARRAY(3bsd)

NAME
reallocarray - memory allocation and deallocation

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.