[Numpy-discussion] C Api newbie question

Matt Knox mattknox_ca at hotmail.com
Mon Aug 28 09:02:34 CDT 2006

>>Matt Knox wrote:>>> Hi there. I'm in the unfortunate situation of trying to track down a >> memory error in someone elses code, and to make matters worse I don't >> really know jack squat about C programming. The problem seems to arise >> when several numpy arrays are created from C arrays in the C api and >> returned to python, and then trying to print out or cast to a string >> the resulting array. I think the problem may be happening due to the >> following chunk of code:>> {>>      PyObject* temp = PyArray_SimpleNewFromData(1, &numobjs, typeNum, >> dbValues);>>      PyObject* temp2 = PyArray_FromArray((PyArrayObject*)temp, >> ((PyArrayObject*)temp)->descr, DEFAULT_FLAGS | ENSURECOPY);>>      Py_DECREF(temp);>>      PyDict_SetItemString(returnVal, "data", temp2);>>      Py_DECREF(temp2);>> }>>  >> Lets assume that all my other inputs up this point are fine and that >> numobjs, typeNum, and dbValues are fine. Is their anything obviously >> wrong with the above chunk of code? or does it appear ok? Ultimately >> the dictionary "returnVal" is returned by the function this code came >> from, and everything else is discarded. Any help is very greatly >> appreciated. Thanks in advance,
> You didn't indicate what kind of trouble you are having.>> First of all, this is kind of odd style.  Why is a new array created > from a data-pointer and then copied using PyArray_FromArray (the > ENSURECOPY flag will give you a copy)?  Using>> temp2 = PyArray_Copy(temp)>> seems simpler.   This will also avoid the reference-count problem that > is currently happening in the PyArray_FromArray call on the descr > structure.    Any array-creation function that takes a descr structure > "steals" a reference to it, so you need to increment the reference count > if you are passing an unowned reference to a ->descr structure.>> -Travis
Sorry. Yeah, the problem was the interpreter crashing on exit, which afteryour response definitely seems like it was a reference count issue. Ichanged the PyArray_FromArray call to be PyArray_Copy and it seems to workfine. Thank you very much!
Love the numpy stuff (when I can stay in the python world and not mess withthe C stuff :) ). Keep up the great work!
- Matt
Be one of the first to try Windows Live Mail.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://projects.scipy.org/pipermail/numpy-discussion/attachments/20060828/10263627/attachment-0001.html 

More information about the Numpy-discussion mailing list