public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
* segfault with std::allocator
@ 2004-09-03 13:23 Toon Knapen
  2004-09-03 13:45 ` Eljay Love-Jensen
  0 siblings, 1 reply; 4+ messages in thread
From: Toon Knapen @ 2004-09-03 13:23 UTC (permalink / raw)
  To: gcc-help

Following problem segfaults with gcc 3.2.2 inside the deallocate 
function. AFAICT however, allocation and deallocation of 0 number of 
objects are allowed ?

<code>
<code>
#include <memory>

int main()
{
    std::allocator< int > int_alloc ;
    int* p = int_alloc.allocate( 0 ) ;
    int_alloc.deallocate( p, 0 ) ;
    return 0 ;
}
</code>



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: segfault with std::allocator
  2004-09-03 13:23 segfault with std::allocator Toon Knapen
@ 2004-09-03 13:45 ` Eljay Love-Jensen
  2004-09-03 13:57   ` Toon Knapen
  0 siblings, 1 reply; 4+ messages in thread
From: Eljay Love-Jensen @ 2004-09-03 13:45 UTC (permalink / raw)
  To: Toon Knapen, gcc-help

Hi Toon,

The deallocate function MUST NOT by passed in a NULL pointer.  (According 
to ISO 14882.)

You can fix your code by...

#include <memory>
int main()
{
    std::allocator< int > int_alloc ;
    int* p = int_alloc.allocate( 0 ) ;
    if(p) int_alloc.deallocate( p, 0 ) ;
    return 0 ;
}

HTH,
--Eljay

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: segfault with std::allocator
  2004-09-03 13:45 ` Eljay Love-Jensen
@ 2004-09-03 13:57   ` Toon Knapen
  2004-09-03 14:34     ` Eljay Love-Jensen
  0 siblings, 1 reply; 4+ messages in thread
From: Toon Knapen @ 2004-09-03 13:57 UTC (permalink / raw)
  To: Eljay Love-Jensen; +Cc: gcc-help

Eljay Love-Jensen wrote:

> 
> Hi Toon,
> 
> The deallocate function MUST NOT by passed in a NULL pointer.  
> (According to ISO 14882.)
> 


But 20.4.1.1 par 8 only says "p shall be a pointer obtained from 
allocate(). n shall equal the value passed as the first argument to the 
invocation of allocate which returned p". Next as a not is added that it 
uses '::operator delete' and delete is allowed to be called on a NULL 
pointer.



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: segfault with std::allocator
  2004-09-03 13:57   ` Toon Knapen
@ 2004-09-03 14:34     ` Eljay Love-Jensen
  0 siblings, 0 replies; 4+ messages in thread
From: Eljay Love-Jensen @ 2004-09-03 14:34 UTC (permalink / raw)
  To: Toon Knapen; +Cc: gcc-help

Hi Toon,

You're not calling delete, your calling int_alloc.deallocate(p, 0);

And the deallocate routine (in ISO 14882, table 32 in 20.1.5) specifically 
says "p must not be null".

--Eljay

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2004-09-03 14:34 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-09-03 13:23 segfault with std::allocator Toon Knapen
2004-09-03 13:45 ` Eljay Love-Jensen
2004-09-03 13:57   ` Toon Knapen
2004-09-03 14:34     ` Eljay Love-Jensen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).