
I believe PyArray_FromDims() returns a new reference to the object (arr) and that the Py_BuildValue creates another reference so that you've got two references to that array and python is only going to DECREF one when it's done. I would suggest either 1) using the 'N' format character to Py_BuildValue so that another reference isn't created or 2) explicitly calling Py_DECREF(arr) just before you return.
Reggie
>>>>>>>>>>>> Original Message <<<<<<<<<<<<<<<<<<
On 2/22/02, 4:19:15 PM, Mathew Yeates mathew@fugue.jpl.nasa.gov wrote regarding [Numpy-discussion] memory not being freed:
Hi I'm having problems with garbage collection I wrote an extension which creates an array and returns it
foo() { arr = (PyArrayObject *) PyArray_FromDims( ..... ret = Py_BuildValue("O", arr); return ret; }
but now if I do while 1: a=foo()
memory is never free'd. I've even tried explicitly calling gc.collect and adding del(a) after a=foo.
Is the problem that Py_BuildValue increases the reference count?
Mathew
Numpy-discussion mailing list Numpy-discussion@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/numpy-discussion