reallocarray(3) memory allocation and deallocation


Lb libbsd


In bsd/stdlib.h Ft void * Fn reallocarray void *ptr size_t nmemb size_t size


When using Fn 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 Fn reallocarray , as follows:

if ((p = reallocarray(NULL, num, size)) == NULL)
        err(1, "malloc");

Alternatively Fn calloc is a more portable solution which comes with the cost of clearing memory.

If Fn malloc must be used, be sure to test for overflow:

if (size && num > SIZE_MAX / size) {
        errno = ENOMEM;
        err(1, "overflow");

The use of Fn reallocarray or Fn calloc is strongly encouraged when allocating multiple sized objects in order to avoid possible integer overflows.


The Fn reallocarray function returns a pointer to the allocated space if successful; otherwise, a null pointer is returned and errno is set to Er ENOMEM .


Fn reallocarray appeared in Ox 5.6 .