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

FreeBSD Manual Pages

  
 
  

home | help
REALLOCARRAY(3)		    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 over-
       flow 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 argu-
       ment 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	 allo-
       cated  until  the allocation has	been successful.  This can cause aber-
       rant program 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 allocated.	 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.2			  May 1, 2015		       REALLOCARRAY(3)

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&sektion=3&manpath=FreeBSD+14.0-RELEASE+and+Ports>

home | help