我正在编写一个简单的C代码,它将返回一个double数组给python。我成功编译了代码,没有错误,并且可以生成.so
文件以导入python。但是,当我从Python环境调用包装的C函数时,会得到core dump
。我在下面附加了c代码,以便可以重现该错误。如果有人指示我指出我要去哪里错误而导致core dump
错误,我将非常有义务。调试时,我发现错误的来源在行中
pyArr = (PyArrayObject*) PyArray_SimpleNewFromData(2, dims, NPY_DOUBLE, ptr);
但是我无法解决此问题。我还在static double array
中尝试了line 6
,但遇到了同样的core dump
问题。任何帮助表示赞赏。
#include <Python.h>
#include <numpy/arrayobject.h>
#include <numpy/ndarrayobject.h>
extern "C" {
static PyObject* func_wrap(PyObject* , PyObject* args)
{
double* ptr;
ptr = (double *) malloc(4 * sizeof(double));
*ptr = 1.0; *(ptr+1) = 2.0; *(ptr+2) = 3.0; *(ptr+3) = 4.0;
PyArrayObject* pyArr;
npy_intp dims[1];
dims[0] = 4;
pyArr = (PyArrayObject*)PyArray_SimpleNewFromData(1, dims, NPY_BYTE, ptr);
PyArray_ENABLEFLAGS(pyArr, NPY_ARRAY_OWNDATA); /* numpy array takes the ownership afterwards */
return Py_BuildValue("O", pyArr);
}
static PyMethodDef CppMethods[] = {
{"func", func_wrap, METH_VARARGS, "returns numpy 1d array"},
{NULL, NULL, 0, NULL}
};
// Define module information
static struct PyModuleDef mydemo = {
PyModuleDef_HEAD_INIT,
"mydemo",
"mydemo Module",
-1,
CppMethods
};
// Init function for module
PyMODINIT_FUNC PyInit_mydemo(void) {
import_array();
return PyModule_Create(&mydemo);
}
}