Boost logo

Boost Users :

Subject: [Boost-users] Problem with casting numeric array to/from PyArrayObject
From: Lionel LE ROUX (lionel.leroux_at_[hidden])
Date: 2009-08-25 06:34:34


Hi,
To start with Boost, I wrote a (very simple) test_that_() function in
C/Boost with a numeric::array& as argument. I compiled a .so file and
I'm then able to seamlessly use this function from Python : that's for
the successful part...
Now I want to trace memory usage (and possible leaks) using Valgrind :
then I don't use Python anymore and decide to stay in the C world : so I
wrote a short test program in C which only includes a call to the
function in the .so :

    /int main(void) {
         Py_Initialize();
         import_array();

    npy_intp dim[]={1000};
         PyArrayObject* X = (PyArrayObject*)PyArray_SimpleNew(1, dim,
    PyArray_FLOAT);

        test_that_((numeric::array&)X);

         Py_DECREF(X);
         Py_Finalize();

         return 0;
    }/

I can compile and build the executable file with no error but when I run
it : segmentation fault when I try to use PyArray_Size within the
test_that() function, which only "link" a PyArrayObject to the
numeric::array argument. The manipulation of the data seems to be OK but
problem arises with PyArray_Size.

Well, looks like the double cast (PyArrayObject -> numeric::array ->
PyArrayObject) is not valid.
Could someone confirm (or not) my (very) bad coding ?
Thanks.



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net