This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: c++/9982: placement new returns wrong value


bangerth at dealii dot org wrote:
Synopsis: placement new returns wrong value

State-Changed-From-To: open->closed
State-Changed-By: bangerth
State-Changed-When: Thu Mar 6 19:41:07 2003
State-Changed-Why:
This is not a bug. For array expressions, the compiler puts
the number of array elements into the first slot (pointed to
by the placement argument), and only then the elements of the
array. This is so because delete[] needs this information.

There is no delete[] corresponding to the placement new[], hence this is useless. In many cases the compiler actually seems to figure that out:
changing the line


A * b = new(a) A[3];

to

A * b = new((void*)a) A[3];

makes a and b pointing to the same position. Why is the difference here?

But you are right, the standard seems to allow any behavior. However, this makes operator new(a)[] pretty much useless, since the final position of the new array is undefined and one does not even know the necessary size of the provided memory region.

Thomas


http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=9982





Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]