Я пишу простой код на c, который вернет двойной массив в python. Я успешно скомпилировал код без ошибок и могу сгенерировать файл .so
для импорта в python. Однако, когда я вызываю упакованную функцию C из среды Python, я получаю 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);
}
}