i was debugging a program on FreeBSD 6, and much to my
surprise, i noticed that malloc(0) returns 0x800, as shown
by this program:
        > more a.c
        #include <stdio.h>
        int main(int argc, char *argv[])
        {
                char *p = malloc(0);
                printf(" malloc 0 returns %p\n", p);
        }
        > cc -o a a.c
        > ./a
         malloc 0 returns 0x800

if you look at the source this is indeed clear - internally
the 0x800 is ZEROSIZEPTR and is set when a zero length is
passed to malloc() unless you have malloc_sysv set.

The thing is, i don't know if this behaviour is intentional or not,
but certainly is not documented -- the manpage documents
something totally different (in the section for the 'V'
MALLOC_OPTION, see below).

  TUNING
     ...
     V       Attempting to allocate zero bytes will return a NULL pointer
             instead of a valid pointer.  (The default behavior is to make a
             minimal allocation and return a pointer to it.)  This option is
             provided for System V compatibility.  This option is incompatible
             with the ``X'' option.


So what should we do with this ? Just fix the manpage or fix the
code ? This behaviour is likely to break quite a few things...

        cheers
        luigi
_______________________________________________
freebsd-stable@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to