Re: Error in man page: realloc(ptr, 0) is not equivalent to free(ptr)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thursday 21 February 2008, Lasse Kärkkäinen wrote:
> The man page says that realloc(ptr, 0) is equivalent to free, even
> though it isn't. The text on the man page says
>
> ---
> realloc()  changes the size of the memory block pointed to by ptr to
> size bytes.  The contents will be unchanged to the minimum of the old
> and new sizes;  newly  allocated memory  will  be  uninitialized.   If
> ptr  is  NULL,  the call is equivalent to malloc(size); if size is equal
> to zero, the call is equivalent to free(ptr).  Unless ptr is NULL, it
> must have been returned by an earlier call to malloc(), calloc() or
> realloc().  If the area pointed to was moved, a free(ptr) is done.
> [...]
> realloc()  returns a pointer to the newly allocated memory, which is
> suitably aligned for any kind of variable and may be different from ptr,
> or NULL if the request fails.  If  size  was equal to 0, either NULL or
> a pointer suitable to be passed to free() is returned.  If realloc()
> fails the original block is left untouched; it is not freed or moved.

i would just word it to say that when realloc() is given a size of 0, it is 
implementation defined as to the behavior, but it tends to match the behavior 
of malloc(0) (which too is implementation defined).  POSIX and C99 allow both 
cases to return either a NULL pointer or a "unique" pointer.  glibc will 
return a unique pointer (which cannot actually be used to store anything), 
but uClibc may return NULL.
-mike

Attachment: signature.asc
Description: This is a digitally signed message part.


[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux