[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#224735: libstdc++5-3.3-dev: Leaks in string allocation?



Package: libstdc++5-3.3-dev
Version: 1:3.3.1-0pre0
Severity: normal
Tags: upstream

Hi, I think I've found a bug in the allocation of strings done by the
standard c++ library.  Maybe you are already aware of it, but I thought
it might be useful to report it.

This small testcase:
-------------------
#include <string>

int main(int argc, char* argv[])
{
    std::string stars = "*************";
    return 0;
}

Is reported to have leaks with three different leak analyzers:

leaktracer (2.4-1.0)
Gathered 1 (1 unique) points of data.
(gdb) 
#-- Leak: counted 1x / total Size: 1280
No source file for address 0x400a7efb.

ccmalloc (0.4.0-2.0)
(...)
.---------------.
|ccmalloc report|
=======================================================
| total # of|   allocated | deallocated |     garbage |
+-----------+-------------+-------------+-------------+
|      bytes|        1280 |           0 |        1280 |
+-----------+-------------+-------------+-------------+
|allocations|           1 |           0 |           1 |
+-----------------------------------------------------+
(...)
*100.0% = 1280 Bytes of garbage allocated in 1 allocation
|       |
|       |       0x40121da6 in <???>
|       |
|       |       0x080490b5 in <main>
(...)

valgrind (20031012)
(...)
==19195== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
==19195== malloc/free: in use at exit: 1280 bytes in 1 blocks.
==19195== malloc/free: 1 allocs, 0 frees, 1280 bytes allocated.
==19195== 
==19195== searching for pointers to 1 not-freed blocks.
==19195== checked 4562000 bytes.
==19195== 
==19195== 1280 bytes in 1 blocks are still reachable in loss record 1 of 1
==19195==    at 0x4002CAFD: __builtin_new (vg_replace_malloc.c:172)
==19195==    by 0x4002CB68: operator new(unsigned) (vg_replace_malloc.c:185)
==19195==    by 0x402CEEFA: std::__default_alloc_template<true,0>::_S_chunk_alloc(unsigned, int&) (in /usr/lib/libstdc++.so.5.0.5)
==19195==    by 0x402CEE0C: std::__default_alloc_template<true,0>::_S_refill(unsigned) (in /usr/lib/libstdc++.so.5.0.5)
==19195== 
==19195== LEAK SUMMARY:
==19195==    definitely lost: 0 bytes in 0 blocks.
==19195==    possibly lost:   0 bytes in 0 blocks.
==19195==    still reachable: 1280 bytes in 1 blocks.
==19195==         suppressed: 0 bytes in 0 blocks.
(...)


Testing with other string constructors, such as 
  string stars(10, '*');
or passing a string as a parameter to a procedure, gives the same
results, while using the empty constructor (string stars;) shows no
leak at all.


At first I thought this might be a problem of the leak analyzers, but 3
analyzers having the same problem seems a bit too much.

I consulted some other programmers, and all agreed that this really
looked as a bug in the standard library.

I hope you can have a look at it.

Love,
Margarita Manterola


-- System Information:
Debian Release: testing/unstable
Architecture: i386
Kernel: Linux hormiga.amadeus 2.4.19-686 #1 Mon Nov 18 23:59:03 EST 2002 i686
Locale: LANG=es_AR, LC_CTYPE=es_AR

Versions of packages libstdc++5-3.3-dev depends on:
ii  g++-3.3                    1:3.3.1-0pre0 The GNU C++ compiler
ii  gcc-3.3-base               1:3.3.1-0pre0 The GNU Compiler Collection (base 
ii  libc6-dev                  2.3.2.ds1-10  GNU C Library: Development Librari
ii  libstdc++5                 1:3.3.2-4     The GNU Standard C++ Library v3

-- no debconf information




Reply to: