From: Todd M. <jm...@st...> - 2002-04-11 21:35:34
|
cl...@sp... wrote: > >cl...@sp... writes: > > > > Hello, > > I'm trying to track down a segv when I do the B[:] operation on an > > array, "B", a that I've built in as a view on external data. During... > > [snip] > >To clarify my own somewhat non-sensical post: When I started composing >my message, I was trying to figure out a bug in my own code that >caused a crash while doing slice_array. I've since fixed that bug. >However, in the process of figuring out what I was doing wrong I >was browsing the Numeric source code. While examining >PyArray_Free(..) in arrayobject.c, I saw that returns -1 whenever the >number of dimensions is greater than 2, yet it has code that tests for >when the number of dimensions equals 3. > >So utimately, my post is just an alert, that I think there might be >some code that needs to be cleaned up. > >Thanks, > lacking-caffeine-ly yours > -chris > >_______________________________________________ >Numpy-discussion mailing list >Num...@li... >https://lists.sourceforge.net/lists/listinfo/numpy-discussion > 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++%} */ Other opinions? Todd -- Todd Miller jm...@st... STSCI / SSG (410) 338 4576 |