[Bug libstdc++/20062] hash_map leak memory

arturas at inf dot unibz dot it gcc-bugzilla@gcc.gnu.org
Fri Feb 18 22:26:00 GMT 2005


------- Additional Comments From arturas at inf dot unibz dot it  2005-02-18 18:25 -------
Subject: Re:  hash_map leak memory

Hi Pinskia,

I think I made a mistake including the code.

Here's the code:

--------------------------------- a.cc ---------------------------------
#include <vector>
#include <iostream>

#undef __DEPRECATED
#include <hash_map.h>

class Eqstr {
  public:
  bool operator()(const char* s1, const char* s2) const {

  if (strcmp(s1, s2) == 0)
    return true;
  else
    return false;
  }
};

using std::vector;
using std::cout;
using std::endl;

main () {
  hash_map<const char*, int *, hash<const char*>, Eqstr> signatures;
  hash_map<const char*, int *, hash<const char*>, Eqstr>::iterator it;

  char *str;
  int *pi, j;
  char qgram[4];
  qgram[0] = qgram[1] = qgram[2] = 'a';
  qgram[3] = 0;
  vector< char * > p;

  while (strcmp( qgram, "zzz" ) != 0) {
    str = new char [4];
    strcpy( str, qgram );
    pi = new int [1];

    signatures[str] = pi;
    //scanning thourgh all strings from aaa to zzz
    if (qgram[2] != 'z')
      qgram[2]++;
    else {
      qgram[2] = 'a';
      if (qgram[1] != 'z')
        qgram[1]++;
      else {
        qgram[1] = 'a';
        qgram[0]++;
      }
    }
  }

  for (it = signatures.begin(); it != signatures.end(); it++) {
    p.push_back( (char *)it->first );
    delete[] it->second;
  }

  for (j = 0; j < p.size(); j++)
    delete[] (p[j]);
}
---------------------------------------------------------------------

memory leak was obtain in the following way:

$ g++ -g a.cc
$ LeakTracer/LeakCheck ./a.out
$ LeakCheck ./a.out # (From http://www.andreasen.org/LeakTracer/)
$ arturas@rose:/tmp$ ~/edit/LeakTracer/leak-analyze ./a.out
Gathered 56 (1 unique) points of data.
(gdb) 
#-- Leak: counted 56x / total Size: 296360
  No source file for address 0x400a9a5b.

I've played a little with __builtin_return_address to retrieve the place
of the leak. It seems that it is line 127 of stl_vector.h file.

Should I also upload the file?

Thanks,
arturas


On Fri, Feb 18, 2005 at 06:18:01PM -0000, pinskia at gcc dot gnu dot org wrote:
> 
> ------- Additional Comments From pinskia at gcc dot gnu dot org  2005-02-18 18:18 -------
> (In reply to comment #0)
> >         Compile the code, rerun command, I included in the description
> 
> I don't see any.
> 
> -- 
> 
> 
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20062
> 
> ------- You are receiving this mail because: -------
> You reported the bug, or are watching the reporter.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20062



More information about the Gcc-bugs mailing list