I have this c++ code:
#define DLLEXPORT extern "C"
DLLEXPORT double **points(unsigned N, unsigned D)
{
double **POINTS = new double * [N];
for (unsigned i=0;i<=N-1;i++) POINTS[i] = new double [D];
for (unsigned j=0;j<=D-1;j++) POINTS[0][j] = 0;
// do some calculations, f.e:
// POINTS[i][j] = do_smth()
//
return POINTS
}
which I compile using this command:
g++ -shared gpoints.cc -o gpoints.so -fPIC
Now I want to call this function from python using ctypes. I tried smth like this:
mydll = ctypes.cdll.LoadLibrary('/.gpoints.so')
func = mydll.points
mytype = c.c_double * 3 * 10
func.restype = mytype
arr = func(10, 3)
print(arr)
When I try to run it I get:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
[1] 2794 abort python3 test.py
So, how to properly call this function from Python?
P.S. I got this library "as is", so, it is desirable to use it without rewriting c++ code.