Module Name: src
Committed By: pooka
Date: Mon Jul 20 12:10:03 UTC 2009
Modified Files:
src/lib/libc/stdlib: malloc.3
Log Message:
Re-add explanation of how to correctly use realloc.
To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 src/lib/libc/stdlib/malloc.3
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libc/stdlib/malloc.3
diff -u src/lib/libc/stdlib/malloc.3:1.29 src/lib/libc/stdlib/malloc.3:1.30
--- src/lib/libc/stdlib/malloc.3:1.29 Mon May 18 09:00:02 2009
+++ src/lib/libc/stdlib/malloc.3 Mon Jul 20 12:10:03 2009
@@ -1,4 +1,4 @@
-.\" $NetBSD: malloc.3,v 1.29 2009/05/18 09:00:02 wiz Exp $
+.\" $NetBSD: malloc.3,v 1.30 2009/07/20 12:10:03 pooka Exp $
.\"
.\" Copyright (c) 1980, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -34,7 +34,7 @@
.\" @(#)malloc.3 8.1 (Berkeley) 6/4/93
.\" $FreeBSD: src/lib/libc/stdlib/malloc.3,v 1.73 2007/06/15 22:32:33 jasone Exp $
.\"
-.Dd October 15, 2007
+.Dd June 20, 2009
.Dt MALLOC 3
.Os
.Sh NAME
@@ -106,6 +106,36 @@
.Fn malloc
for the specified size.
.Pp
+When using
+.Fn realloc
+one must be careful to avoid the following idiom:
+.Pp
+.Bd -literal -offset indent
+nsize += 50;
+if ((p = realloc(p, nsize)) == NULL)
+ return (NULL);
+.Ed
+.Pp
+Do not adjust the variable describing how much memory has been allocated
+until one knows the allocation has been successful.
+This can cause aberrant 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
+.Dv NULL
+indicates that the old object still remains allocated.
+Better code looks like this:
+.Bd -literal -offset indent
+newsize = size + 50;
+if ((p2 = realloc(p, newsize)) == NULL) {
+ if (p)
+ free(p);
+ p = NULL;
+ return (NULL);
+}
+p = p2;
+size = newsize;
+.Ed
+.Pp
The
.Fn free
function causes the allocated memory referenced by