I've searched the web for a while but can't seem to find the answer: Have a look at this code:
cdef float [::1] Example_v1 (float *A, float *B, float *C) :
cdef:
float [8] out
float [::1] out_mem
int i
## < do some stuff >
## body
## < finish doing stuff >
out_mem = out
print( " what is out & out_mem type here ", type(out) , type(out_mem) )
return out_mem
def run1(float [::1] A, float [::1] B, float [::1] C):
return Example_v1( &A[0] , &B[0] , &C[0] )
I can compile this in cython without any error. Then when it comes to using it in a python code, the information inside out_mem is junk while I have verify the out is correct if I used a print statement to check the result. I know other alternatives are defined out as a pointer or directly initialized out_mem with np.zeroes(8, dtype=np.float). I'm just curious why doesn't it work as it is.
Also as a related question. If I do switch to using pointer:
cdef:
float *out = <float*> malloc( 8 * sizeof(float))
float [::1] out_mem = <float [:8]> out
Will I need to do free(out) otherwise memory leak ?
Please help.