๐Ÿš€ go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.std.c++
Article #3536

Re: Semantics of "new foo[0]"

#3536
From: Alexandre Oliva
Date: Wed, 28 Feb 1996 16:16
58 lines
2863 bytes
The ARM is  out of date.  The September '95 DWP  (which is also out of
date) states:

  3.7.3.1  Allocation functions           [basic.stc.dynamic.allocation]

2 Each [...] allocation shall 
  yield a pointer to storage (_intro.memory_) disjoint  from  any  other
  currently allocated storage.  The pointer returned points to the start
  (lowest byte address) of the allocated storage.  If the  size  of  the
  space requested is zero, the value returned shall be nonzero and shall
  not point to or within any other  currently  allocated  storage.   The
  results of dereferencing a pointer returned as a request for zero size
  are undefined.2)

  _________________________
  2) The intent is to have operator new() implementable by calling  malยญ
  loc()  or calloc(), so the rules are substantially the same.  C++ difยญ
  fers from C in requiring a zero request to return a non-null  pointer.

G Mike Butler D054 writes:

> According to the ARM section 5.3.3:
>      "operator new() can be called with the argument
>       zero.  Repeated such calls return pointers to
>       distinct objects."  
      
> But when I execute the following:
>     #include <isotream.h>
>     main()
>     {
>       struct foo { char a[1024]; };
>       foo *p = new foo[0];
>       foo *q = new foo[0];

>       cout << (void *)p << " " << (void *)q << endl;
>     }

> I get
>     0x338d8 0x338e8

> While these are distinct pointers, the pointers refer to overlapping
> objects. Is this a legitimate interpretation of section 5.3.3 or is
> this a compiler/library bug?

> Incidentally, the standard template library included with gcc 2.7.2
> relies on "operator new(0)" working.
-- 
Alexandre Oliva
oliva@dcc.unicamp.br
Universidade Estadual de Campinas, S~ao Paulo, Brasil


[ comp.std.c++ is moderated.  To submit articles: Try just posting with your
                newsreader.  If that fails, use mailto:std-c++@ncar.ucar.edu
  comp.std.c++ FAQ: http://reality.sgi.com/austern/std-c++/faq.html
  Moderation policy: http://reality.sgi.com/austern/std-c++/policy.html
  Comments? mailto:std-c++-request@ncar.ucar.edu
]
Technical Details
Message-ID: <orag23j2kn.fsf@grande.dcc.unicamp.br>
Path: arc1-ca.pugleaf.net!engnews1.Eng.Sun.COM!taumet!clamage
References: <MGB.96Feb27175316@kronecker.mitre.org>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!engnews1.Eng.Sun.COM!taumet!clamage
From: oliva@dcc.unicamp.br (Alexandre Oliva)
Newsgroups: comp.std.c++
Subject: Re: Semantics of "new foo[0]"
Date: 28 Feb 1996 16:16:43 GMT
Organization: DCC - UNICAMP - Campinas, SP, Brazil
Sender: oliva@grande.dcc.unicamp.br
Approved: clamage@eng.sun.com (comp.std.c++)
Message-ID: <orag23j2kn.fsf@grande.dcc.unicamp.br>
References: <MGB.96Feb27175316@kronecker.mitre.org>
NNTP-Posting-Host: taumet.eng.sun.com
Content-Type: text
X-Nntp-Posting-Host: grande.dcc.unicamp.br
In-Reply-To: mgb@kronecker.mitre.org's message of 27 Feb 1996 15:13:07 PST
X-Newsreader: Gnus v5.1
Content-Length: 1762
X-Lines: 50
Originator: clamage@taumet