FreeBSD Manual Pages
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); void * recallocarray(void *ptr, size_t oldnmeb, 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. The recallocarray() function is similar to the reallocarray() function except it ensures newly allocated memory is cleared similar to calloc(). If ptr is NULL, oldnmemb is ignored and the call is equiva- lent to calloc(). If ptr is not NULL, oldnmemb must be a value such that oldnmemb * size is the size of the earlier allocation that re- turned ptr, otherwise the behaviour is undefined. 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) STANDARDS reallocarray() conforms to . HISTORY The reallocarray() function first appeared in OpenBSD 5.6 and FreeBSD 11.0. The recallocarray() function first appeared in OpenBSD 6.1 and FreeBSD 15.1. FreeBSD ports 15.quarterly October 2, 2025 REALLOCARRAY(3)
NAME | LIBRARY | SYNOPSIS | DESCRIPTION | RETURN VALUES | EXAMPLES | SEE ALSO | STANDARDS | HISTORY
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=reallocarray&sektion=3&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>
