D. Richard Hipp wrote:
On Wed, 2005-06-29 at 15:19 +0300, Lauri Nurmi wrote:

So, basically, is there a reason why sqlite3Malloc(n) & co should even
try to allocate zero bytes, instead of just returning NULL if n==0? Does
a pointer pointing to zero bytes of memory have any use anyway?

Yes.  A NULL return from sqlite3Malloc() is an error condition meaning
that you have run out of memory.  That is very different from returning
a zero-length memory allocation.

I see the difference, yes. Still, I'm not convinced that doing a malloc(0) is a good thing.

I found this quotation from the net <http://lists.freebsd.org/pipermail/freebsd-net/2004-February/002946.html>, it is probably from the C99 standard:

---
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.
---

So malloc(0) may return NULL, and even if it doesn't, the pointer should not be used.

You wouldn't want to substitute a NULL for an empty string in SQL would
you?  Having sqlite3Malloc return NULL for a zero-length allocation is
roughly the same thing.

Hmm, an empty (C-style) string doesn't fit into zero bytes, it needs one byte for the '\0'. If you have a pointer pointing to zero allocated bytes, you can't even use strlen() or anything else on it [according to the quotation above].


--
Lauri Nurmi
Ksenos DVR Development

Reply via email to