[Python-Dev] Problem with the memory docs

Tim Peters tim.one@comcast.net
Wed, 03 Apr 2002 23:11:11 -0500


The docs for PyMem_Malloc say:

    Requesting zero bytes returns a non-NULL pointer.

I can't guarantee this without insane effort, and our code has never
guaranteed this.  If pymalloc or the platform allocator can't even allocate
one byte in this case, nothing can be done to guarantee it except to return
"an address" fabricated out of thin air, and guaranteed not to match any
legitimate address.  Then realloc and free would have to special-case the
snot out of those fabricated addresses to avoid going insane.  Note that C
does not guarantee malloc(0) will return a non-NULL pointer, even on
platforms where malloc(0) *tries* to return a non-NULL pointer.  It doesn't
have a choice about this:  since all non-NULL addresses returned by a
conforming C malloc() have to be pairwise distinct so long as none are
free()'ed, you can provoke any C implementation into returning NULL for
malloc(0) just by calling malloc(0) often enough without doing any free()s.

I vote to change the docs.  If you vote for something else, you implement it
<wink>.