[SciPy-dev] PyArray_New problem

Travis Oliphant oliphant.travis at ieee.org
Fri Dec 2 11:16:36 EST 2005


Robert Cimrman wrote:

>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.
>
>  
>
Have you completely re-compiled since upgrading your scipy_core 
installation.  If you haven't, you are using the wrong function-pointer 
table (the C-API is actually a function-pointer table).  If there are 
changes to the C-API and you don't recompile, this kind of thing happens.


-Travis




More information about the SciPy-Dev mailing list