[Numpy-discussion] slice question and bug
Travis Oliphant
oliphant at ee.byu.edu
Thu Apr 11 15:47:04 EDT 2002
> Looking at the code to PyArray_Free, I agree with Chris. Called to
> free a 2D
> array, I think that PyArray_Free leaks all of the row storage because
> ap->nd == 2, not 3:
>
> * {%c++%} */
> extern int PyArray_Free(PyObject *op, char *ptr) {
> PyArrayObject *ap = (PyArrayObject *)op;
> int i, n;
>
> if (ap->nd > 2) return -1;
> if (ap->nd == 3) {
> n = ap->dimensions[0];
> for (i=0; i<n; i++) {
> free(((char **)ptr)[i]);
> }
> }
> if (ap->nd >= 2) {
> free(ptr);
> }
> Py_DECREF(ap);
> return 0;
> }
> /* {%c++%} */
>
>
This has been broken since the beginning. I believe the documentation
says as much. I've never used it because I always think of 2-D arrays as
a block of data not as rows of pointers.
It should be fixed, but no one's ever been interested enough to do it.
-Travis Oliphant
More information about the NumPy-Discussion
mailing list