Re: malloc with size 0

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance

From: Carl Daniel [VC++ MVP] (cpdaniel_remove_this_and_nospam_at_mvps.org.nospam)
Date: 11/09/04


Date: Tue, 9 Nov 2004 08:54:42 -0800

Liz wrote:
> on MSDN, it says that if size is 0, then malloc would return a valid
> pointer. But the behavior of malloc on unix is if size is 0, then
> malloc would return null. Does anyone know if malloc had always
> returned valid pointer for size 0 or only in recent releases. If
> this is a new behavior, does anyone know if there is a compiler flag
> that would make malloc return null so my code can be backward
> compatible?

Both are allowed by the C and C++ standards - a portable program can't rely
on one implementation or another.

C99 says (pay particular attention to the last sentence):

7.20.3 Memory management functions

The order and contiguity of storage allocated by successive calls to the
calloc, malloc, and realloc functions is unspecified. The pointer returned
if the allocation succeeds is suitably aligned so that it may be assigned to
a pointer to any type of object and then used to access such an object or an
array of such objects in the space allocated (until the space is explicitly
deallocated). The lifetime of an allocated object extends from the
allocation until the deallocation. Each such allocation shall yield a
pointer to an object disjoint from any other object. The pointer returned
points to the start (lowest byte address) of the allocated space. If the
space cannot be allocated, a null pointer is returned.

If the size of the space requested is zero, the behavior is
implementation-defined: either a null pointer is returned, or the behavior
is as if the size were some nonzero value, except that the returned pointer
shall not be used to access an object.

-cd



Relevant Pages

  • Re: malloc() and alignment
    ... types of allocation function: ... malloc, generic allocator, same as current malloc ... And if you already need alignment sufficient ... pointer value invokes undefined behavior. ...
    (comp.lang.c)
  • Re: Reference counting
    ... pointer, so by knowing ALIGN_MAX, the pointer at offset ALIGN_MAX ... allocation, copy, and release functions. ... what was asked, to reference count. ... I don't have access to what malloc uses internally. ...
    (comp.lang.c)
  • double* p=malloc(1) // OK?
    ... Can the result of malloc always be assigned to a pointer whose ... The result of an allocation function is defined to be aligned suitably ... a pointer refers to an entity of the referenced type, ...
    (comp.std.c)
  • Re: (part 10) More Schildt-like errors in Dicky Heathens book
    ... like mallocif mallocreturns a non-NULL pointer. ... If one is using a debugging malloc which checks that all accesses are ... when sz is zero, it gives the debugging allocator an opportunity to ...
    (comp.lang.c)
  • Re: (MS-)DOS PC on a microcontroller??
    ... memory block of zero bytes. ... all of malloc, realloc, and calloc and thus is isolated in the ... The pointer returned if the ... Each such allocation shall yield a pointer to ...
    (comp.arch.embedded)