[SciPy-dev] PyArray_New problem

Robert Cimrman cimrman3 at ntc.zcu.cz
Fri Dec 2 10:04:40 CST 2005


Travis Oliphant wrote:
> Robert Cimrman wrote:
> 
> 
>> Could someone tell me what I am doing wrong? I would like to use a
>>  function like the snippet below to create an array.
>> 
>> PyArrayObject *helper_newCArrayObject_i32( int32 len, int32 *array
>> ) { intp plen[1]; PyArrayObject *obj = 0;
>> 
>> plen[0] = len; printf( "11111 %d\n", PyArray_INT32 ); /*   obj =
>> (PyArrayObject *) PyArray_SimpleNew( 1, plen, PyArray_INT32 ); */
>> 
>> obj = (PyArrayObject *) PyArray_New( &PyArray_Type, 1, plen, 
>> PyArray_INT32, NULL, NULL, 0, CARRAY_FLAGS, NULL ); ....
>> 
>> 
> 
> 
> First of all, don't pass in CARRAY_FLAGS when the data argument to 
> PyArray_New is NULL.  A non-zero flags entry tells the subroutine to
>  create a FORTRAN strides array if no data is passed.
> 
> Remember:  DATA flags are only to describe already available memory.
>  If you create the memory  in PyArray_New, then the only thing to
> decide is FORTRAN or C- contiguous.   So, in this routine, you are
> creating a Fortran array.  Perhaps this is causing problems later.

I understand this - I first tried with  PyArray_SimpleNew(), then with
PyArray_New() with zero flags and finally tried to play with the flags 
to no avail.

> Also, you are not showing us the rest of the code.  Your traceback is
>  showing PyArray_ValidType being called which is not shown anywere...

Well, that is what is really strange - I have just traced the execution 
with gdb and what is hapenning is, that, instead of PyArray_New(), 
PyArray_ValidType() gets called, and so, obviously, it sees 
&PyArray_Type as its 'int type', which is -1212938592 in my case -> 
segfault. I am clueless why this happens.

r.




More information about the Scipy-dev mailing list