[geos-devel] Memory leak in RelateComputer?

Mateusz Loskot mateusz at loskot.net
Tue May 6 03:45:49 EDT 2008


王永杰 wrote:
> Intend to know how to release the pointer return by Geometry::Relate,
> I trace the source code to class RelateComputer. There is a private
> member variable named "im" initialized in the constructor.
> 
> RelateComputer::RelateComputer(std::vector<GeometryGraph*> *newArg):
> 	arg(newArg),
> 	nodes(RelateNodeFactory::instance()),
> 	im(new IntersectionMatrix())
> {
> }
> The variable "im" is created by operator "new", so I think it must
> destroyed in the destructor, but there is nothing in the destructor of
> RelateComputer.
> 
> RelateComputer::~RelateComputer()
> {
> }
> 
> I think "delete im; im = NULL" is needed, right?

Wang,

You are correct that RelateComputer allocates new IntersectionMatrix 
object, though the computer instance does not own it.
Next, ownership of the intersection matrix is transfered to a 
RelateComputer caller according to following scheme:

vool foo()
{
   RelateComputer rc;
   IntersectionMatrix* im = rccomp.computeIM(); // ownership transfer
   bool res = im->matches(...);
   delete im; // required deallocation
   return res;
}

RelateComputer is not required to deallocate the matrix in its 
destructor, and no memory leak should not occur.

Greetings
-- 
Mateusz Loskot
http://mateusz.loskot.net


More information about the geos-devel mailing list