diff options
author | Alejandro Colomar <alx.manpages@gmail.com> | 2021-01-09 22:15:06 +0100 |
---|---|---|
committer | Michael Kerrisk <mtk.manpages@gmail.com> | 2021-01-10 09:18:22 +0100 |
commit | da116d481b79892026029b442fb381713a09f123 (patch) | |
tree | 4164169e92ea98d1ae01a34c76197c6650590e9b | |
parent | ccca30c230e308a440319f7d87eaec2854fe937f (diff) | |
download | man-pages-da116d481b79892026029b442fb381713a09f123.tar.gz |
malloc.3: Document that realloc(p, 0) is specific to glibc and nonportable
A more detailed notice is on realloc(3p).
......
$ man 3p realloc \
|sed -n \
-e '/APPLICATION USAGE/,/^$/p' \
-e '/FUTURE DIRECTIONS/,/^$/p';
APPLICATION USAGE
The description of realloc() has been modified from pre‐
vious versions of this standard to align with the
ISO/IEC 9899:1999 standard. Previous versions explicitly
permitted a call to realloc(p, 0) to free the space
pointed to by p and return a null pointer. While this be‐
havior could be interpreted as permitted by this version
of the standard, the C language committee have indicated
that this interpretation is incorrect. Applications
should assume that if realloc() returns a null pointer,
the space pointed to by p has not been freed. Since this
could lead to double-frees, implementations should also
set errno if a null pointer actually indicates a failure,
and applications should only free the space if errno was
changed.
FUTURE DIRECTIONS
This standard defers to the ISO C standard. While that
standard currently has language that might permit real‐
loc(p, 0), where p is not a null pointer, to free p while
still returning a null pointer, the committee responsible
for that standard is considering clarifying the language
to explicitly prohibit that alternative.
Bug: 211039 <https://bugzilla.kernel.org/show_bug.cgi?id=211039>
Reported-by: Johannes Pfister <johannes.pfister@josttech.ch>
Cc: libc-alpha@sourceware.org
Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
-rw-r--r-- | man3/malloc.3 | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/man3/malloc.3 b/man3/malloc.3 index d8b4da62f8..467e2438ab 100644 --- a/man3/malloc.3 +++ b/man3/malloc.3 @@ -149,7 +149,8 @@ is equal to zero, and .I ptr is not NULL, then the call is equivalent to -.IR free(ptr) . +.I free(ptr) +(this behavior is nonportable; see NOTES). Unless .I ptr is NULL, it must have been returned by an earlier call to @@ -375,6 +376,21 @@ The implementation is tunable via environment variables; see .BR mallopt (3) for details. +.SS Nonportable behavior +The behavior of +.BR realloc () +when +.I size +is equal to zero, +and +.I ptr +is not NULL, +is glibc specific; +other implementations may return NULL, and set +.IR errno . +Portable POSIX programs should avoid it. +See +.BR realloc (3p). .SH SEE ALSO .\" http://g.oswego.edu/dl/html/malloc.html .\" A Memory Allocator - by Doug Lea |