Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
REALLOCARRAY(3)	       FreeBSD Library Functions Manual	       REALLOCARRAY(3)

NAME
     reallocarray -- memory reallocation function

LIBRARY
     Standard C	Library	(libc, -lc)

SYNOPSIS
     #include <stdlib.h>

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

DESCRIPTION
     The reallocarray()	function is similar to the realloc() function except
     it	operates on nmemb members of size size and checks for integer overflow
     in	the calculation	nmemb *	size.

RETURN VALUES
     The reallocarray()	function returns a pointer to the allocated space;
     otherwise,	a NULL pointer is returned and errno is	set to ENOMEM.

EXAMPLES
     Consider reallocarray() when there	is multiplication in the size argument
     of	malloc() or realloc().	For example, avoid this	common idiom as	it may
     lead to integer overflow:

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

     A drop-in replacement is the OpenBSD extension reallocarray():

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

     When using	realloc(), be careful to avoid the following idiom:

	   size	+= 50;
	   if ((p = realloc(p, size)) == NULL)
		   return (NULL);

     Do	not adjust the variable	describing how much memory has been allocated
     until the allocation has been successful.	This can cause aberrant	pro-
     gram behavior if the incorrect size value is used.	 In most cases,	the
     above sample will also result in a	leak of	memory.	 As stated earlier, a
     return value of NULL indicates that the old object	still remains allo-
     cated.  Better code looks like this:

	   newsize = size + 50;
	   if ((newp = realloc(p, newsize)) == NULL) {
		   free(p);
		   p = NULL;
		   size	= 0;
		   return (NULL);
	   }
	   p = newp;
	   size	= newsize;

     As	with malloc(), it is important to ensure the new size value will not
     overflow; i.e. avoid allocations like the following:

	   if ((newp = realloc(p, num *	size)) == NULL)	{
		   ...

     Instead, use reallocarray():

	   if ((newp = reallocarray(p, num, size)) == NULL) {
		   ...

SEE ALSO
     realloc(3)

HISTORY
     The reallocarray()	function first appeared	in OpenBSD 5.6 and
     FreeBSD 11.0.

FreeBSD	13.0			  May 1, 2015			  FreeBSD 13.0

NAME | LIBRARY | SYNOPSIS | DESCRIPTION | RETURN VALUES | EXAMPLES | SEE ALSO | HISTORY

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=reallocarray&manpath=FreeBSD+13.2-RELEASE+and+Ports>

home | help