On Fri, Apr 17, 2009 at 9:25 AM, Dan S <dan.s.towell+nu...@gmail.com<dan.s.towell%2bnu...@gmail.com> > wrote:
> 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); ^^^^^^^^^^^^^^^^^^^ Not needed. > > Py_DECREF(array); // destroy the contig array > Py_DECREF(input); // is this needed? ^^^^^^^^^^^^^^^^^^^^ Shouldn't be, but there might be a bug somewhere which causes the reference count of input to be double incremented. Does the reference count in the test script increase without this line? Do array and input point to the same object? Chuck
_______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion