Provided by: libbsd-dev_0.8.2-1ubuntu0.1_amd64 bug

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

     malloc(3), calloc(3), alloca(3)

HISTORY

     reallocarray() appeared in OpenBSD 5.6.