|
|
Message-ID: <20130115134802.GY20323@brightrain.aerifal.cx>
Date: Tue, 15 Jan 2013 08:48:02 -0500
From: Rich Felker <dalias@...ifal.cx>
To: musl@...ts.openwall.com
Subject: Re: malloc(0) behaviour
On Tue, Jan 15, 2013 at 01:33:07PM +0100, Igmar Palsenberg wrote:
>
>
> >> While the above is clear to me, returning a pointer that can't hold anything just seems wrong to me.
> >
> > i don't think we have too many options here,
> > the standards and historical practices has
> > various inconsistencies and musl has the least
> > broken one
> >
> > but we can do a theoretical discussion about
> > the merits of malloc(0)!=0:
> >
> > i'm surprised that it "seems wrong" to you,
> > you can access the amount of bytes you requested
> > through the returned pointer p, evaluating
> > p+size is valid, p is suitably aligned for all
> > objects and it can be freed.
> > these assumptions are broken if malloc(0)==0
>
> That's there to access if size is 0 ? Sure, you can access :
>
> struct foo {
> };
This is a constraint violation. C does not allow empty structs, and
even if it did, they would not have size 0, since no type or object
ever has size 0 in C.
>
> which is size 0. I do wonder what that gives me in practice. That is, not counting the fact that :
>
> if (size == 0)
> size = 1;
>
> was a common practice in malloc() implementations a while ago.
Of course, this is the canonical, simplest way to make malloc(0)
return a unique pointer.
Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.