Scroll to navigation

MALLOC(3) Library Functions Manual MALLOC(3)

NAME

reallocarraymemory allocation and deallocation

LIBRARY

library “libbsd”

SYNOPSIS

#include <bsd/stdlib.h>

void *
reallocarray(void *ptr, size_t nmemb, size_t size);

DESCRIPTION

When using () 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 (), as follows:

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

Alternatively () is a more portable solution which comes with the cost of clearing memory.

If () must be used, be sure to test for overflow:

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

The use of () 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.

May 1, 2014 Debian