@node realloc @section @code{realloc} @findex realloc POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/realloc.html} Gnulib module: realloc-posix Portability problems fixed by Gnulib: @itemize @item Upon failure, the function does not set @code{errno} to @code{ENOMEM} on some platforms: mingw, MSVC 14. @item On some platforms, @code{realloc (p, n)} can succeed even if @code{n} exceeds @code{PTRDIFF_MAX}. Although this behavior is arguably allowed by POSIX it can lead to behavior not defined by POSIX later, so @code{realloc-posix} does not allow going over the limit. @end itemize Without the @samp{realloc-gnu} module described below, it is not portable to call @code{realloc} with a size of 0. With a NULL pointer argument, this is the same ambiguity as @code{malloc (0)} on whether a unique zero-size object is created. With a non-NULL pointer argument @code{p}, C17 says that it is implementation-defined whether @code{realloc (p, 0)} frees @code{p}. Behavior varies on whether @code{realloc (p, 0)} always frees @code{p} and successfully returns a null pointer, or always fails and leaves @code{p} valid, or usually succeeds and returns a unique zero-size object; a program not suspecting these variations in semantics will leak memory (either the still-valid @code{p}, or the non-NULL return value). Extension: Gnulib provides a module @samp{realloc-gnu} that substitutes a @code{realloc} implementation that behaves more like the glibc implementation. It fixes these portability problems: @itemize @item @code{realloc (NULL, 0)} returns @code{NULL} on success on some platforms: AIX 7.2. @item On some platforms, @code{realloc (p, 0)} with non-null @code{p} might not free @code{p}, or might clobber @code{errno}, or might not return @code{NULL}. @end itemize