| REALLOCARRAY(3) | Library Functions Manual | REALLOCARRAY(3) | 
reallocarray —
#include
    <stdlib.h>
void *
  
  reallocarray(void *ptr,
    size_t nmemb, size_t size);
reallocarray() function reallocates the pointer
  ptr to a size appropriate to handle an allocation of
  nmemb elements in an array where each of the array
  elements is size bytes using
  realloc(3) and making sure that
  overflow does not happen in the multiplication of “nmemb *
  size”.
This function is provided for source compatibility with OpenBSD and its use is discouraged in preference to reallocarr(3).
reallocarray() function will return
  NULL if there was overflow or if
  realloc(3) failed setting
  errno to EOVERFLOW or preserving
  the value from realloc(3).
reallocarray() is an OpenBSD
  extension.
reallocarray() function first appeared in
  OpenBSD 5.6. reallocarray()
  was redesigned in NetBSD 8 as
  reallocarr(3). For compatibility
  reasons it's available since NetBSD 8 in the
  _OPENBSD_SOURCE namespace.
reallocarray() function was designed to facilitate
  safe, robust programming and overcome the shortcomings of the
  malloc(3) and
  realloc(3) functions by
  centralizing the overflow check in the multiplication of
  nmemb and size.
There are still portability issues (it does not solve the
    0 sized allocation return ambiguity in the C
    standard: does reallocarray() return
    NULL or a unique pointer to memory that cannot be
    accessed? Does a NULL mean that an error occurred,
    and can someone check errno in that case to find out
    what happened?).
For this reason NetBSD decided to go with an alternative implementation, and created reallocarr(3).
| February 5, 2015 | NetBSD 9.3 |