Ok, I gotcha. My lack of formal programming training is on display today :)

Thanks Sturla and Robert!

Chris

On Mon, Oct 12, 2009 at 10:12 PM, Robert Kern <[email protected]> wrote:
> On 2009-10-12 15:00 PM, Chris Colbert wrote:
>> so I have this function: (the print statements are just for debugging)
>>
>> cdef np.npy_intp* clone_array_shape(np.ndarray arr):
>>      # the proper way to do this would be to use malloc
>>      # to create a new npy_intp* array of the proper size
>>      # but then we would have to track it and make a call to free
>>      # it's easier just to create the two different possible sizes
>>      # on the stack.
>>
>>      # only arrays with len(shape)== 2 or 3 will pass validation
>>      cdef int ndim = arr.ndim
>>      cdef np.npy_intp shape_2[2]
>>      cdef np.npy_intp shape_3[3]
>
> This is your problem. The reason that you don't have to keep track of the
> pointer and free() it with declarations like these is that they *only* live
> inside the function. You cannot return them. You must PyMem_Malloc() an
> appropriately sized pointer, return the pointer, and PyMem_Free() it later.
>
> --
> Robert Kern
>
> "I have come to believe that the whole world is an enigma, a harmless enigma
>  that is made terrible by our own mad attempt to interpret it as though it had
>  an underlying truth."
>   -- Umberto Eco
>
> _______________________________________________
> Cython-dev mailing list
> [email protected]
> http://codespeak.net/mailman/listinfo/cython-dev
>
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to