Hi - I have written a numpy extension which works fine but has a memory leak. It takes a single array argument and returns a single scalar. After reducing the code down in order to chase the problem, I have the following:
static PyObject * kdpee_pycall(PyObject *self, PyObject *args) { PyObject *input; PyArrayObject *array; int n, numdims; if (!PyArg_ParseTuple(args, "O", &input)) return NULL; // Ensure we have contiguous, 2D, floating-point data: array = (PyArrayObject*) PyArray_ContiguousFromObject(input, PyArray_DOUBLE, 2, 2); if(array==NULL){ printf("kdpee_py: nullness!\n"); return NULL; } PyArray_XDECREF(array); Py_DECREF(array); // destroy the contig array Py_DECREF(input); // is this needed? doc says no, but it seems to fix a reference-count-leak return PyFloat_FromDouble(3.1415927); // temporary } The test code is from numpy import * from kdpee import * import sys a = array( [[1,2,3,4,5,1,2,3,4,5], [6,7,8,9,0,6,7,8,9,0]]) sys.getrefcount(a) for i in range(5000): tmp = kdpee(a) sys.getrefcount(a) Every time I run this code I get "2" back from both calls to sys.getrefcount(a), but I'm still getting a memory leak of about 0.4 MB. What am I doing wrong? I'll be grateful for any suggestions you can offer. Thanks Dan P.S. My system is python 2.5.4 (from macports) on intel Mac 10.4.11, numpy provided by macports package "py25-numpy" v1.2.1 _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion