>>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 after
your response definitely seems like it was a reference count issue. I
changed the PyArray_FromArray call to be PyArray_Copy and it seems to work
fine. Thank you very much!
 
Love the numpy stuff (when I can stay in the python world and not mess with
the C stuff :) ). Keep up the great work!
 
- Matt



Be one of the first to try Windows Live Mail.
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Numpy-discussion mailing list
Numpy-discussion@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/numpy-discussion

Reply via email to