[gecode-users] Memory management bug in 2.2.0?

Filip Konvička filip.konvicka at logis.cz
Wed Mar 25 14:18:03 CET 2009


Hi,

I know I'm probably late with this... I am hunting a memory leak in a 
program that uses Gecode 2.2.0. The script (space) constructor 
incrementally adds variables to a var-array (one by one). IMHO, 
VarArray::resize acts strangely:

   VarArray<Var>::resize(Space* home, int m) {
...
     x = static_cast<Var*>(Memory::malloc(sizeof(Var)*newsize));
...
     if (used != n)
       Memory::free(oldx);
     else
       home->reuse(oldx, n);
     n = newsize; used = m;
   }

In my case, "used==n" always holds, so the allocated blocks are 
"deallocated" using Space::reuse(), not Memory::free().

Originally, I was using the default constructor for the array. After I 
saw this I tried to initialize it with (this, 0) in the constructor 
initializer list, but this does not change anything.

It seems to me that VarArray::add and VarArray::resize could never 
actually work... the only way the var-array allocates memory from space 
is in the constructor and update(). Or did I miss something in the docs? 
Is it forbidden to call add and resize?

Thanks,
Filip





More information about the gecode-users mailing list