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.