Ron Natalie wrote:
John Carson wrote:
I believe that the result of a malloc call with a zero argument is
implementation defined. malloc can either return a NULL pointer or
it can return a unique pointer to a zero amount of memory. The VC++
docs say this about malloc:
"If size is 0, malloc allocates a zero-length item in the heap and
returns a valid pointer to that item."
Which is what the standard says. It's not implementation defined.
An implementation that returns zero to malloc(0) is non-standard.
I don't think the C++ Standard says that, or much about malloc() at
all. It's a C library function, and behavior is controlled by the C
Standard. The C99 draft Standard says:
7.20.3 Memory management functions
[#1] 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 freed or
reallocated). 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. The value of a pointer
that refers to freed space is indeterminate.
Naturally, there could be a change in the actual Standard, but I don't
believe so.
Brian