Freeing xalloc'ed array

Paolo Carlini pcarlini@suse.de
Wed Oct 13 09:25:00 GMT 2004


Akim Demaille wrote:

>== 72 bytes in 1 blocks are still reachable in loss record 1 of 1
>==    at 0x1B9052D9: operator new[](unsigned) (vg_replace_malloc.c:139)
>==    by 0x1B9678D3: std::ios_base::_M_grow_words(int) (in /usr/lib/libstdc++.so.5.0.7)
>==    by 0x80489F5: std::ios_base::iword(int) (in /tmp/a.out)
>==    by 0x8048850: main (in /tmp/a.out)
>==
>== LEAK SUMMARY:
>==    definitely lost: 0 bytes in 0 blocks.
>==    possibly lost:   0 bytes in 0 blocks.
>==    still reachable: 72 bytes in 1 blocks.
>==         suppressed: 0 bytes in 0 blocks.
>
>If it is not considered as a bug, what can I do to address this issue?
>
In general, consider that we are talking about **reachable** memory, which
can be easily dealt with by the OS at exit time. You will see this kind 
of ""leak""
very often, in pooled memory allocators, for instance (see a recent 
brief exchange
with Matt Austern and Benjamin about why this is a *good* thing, in general)

More specifically, there is this comment in ios_base.h that explains why you
are seeing it (note that you are calling iword on cout, a standard stream):

    // Destructor
    /**
     *  Invokes each callback with erase_event.  Destroys local storage.
     *
     *  Note that the ios_base object for the standard streams never gets
     *  destroyed.  As a result, any callbacks registered with the standard
     *  streams will not get invoked with erase_event (unless copyfmt is
     *  used).
    */
    virtual ~ios_base();

Honestly, I don't think this is a very troublesome issue...

Paolo.



More information about the Libstdc++ mailing list