我正在尝试编写一个C函数,它接受一个numpy数组对象,提取数据,进行一些操作,并返回另一个c数组作为numpy数组对象。所有工作都无缝进行,我使用python包装器帮助在python端轻松操作。然而,我面临着内存泄漏的问题。我有一个指向浮点数的输出指针,我malloc了它,并在返回调用python函数之前将其包装成Python数组对象。
PyObject *arr;
int nd = 2;
npy_intp dims[] = {5, 10};
double *data = some_function_that_returns_a_double_star(x, y, z);
arr = PyArray_SimpleNewFromData(nd, dims, NPY_DOUBLE, (void *)data);
return arr;
然而,这样做会导致内存泄漏,因为数据从未被释放。我查阅了一些资料,发现这是这类应用程序中的一个问题,解决方法也并非易事。我发现最有帮助的资源是这里。但我无法像该页面所说的那样实现析构函数。有人能帮助我吗?更具体地说,我正在寻找像这样的解决方案:
PyObject *arr;
int nd = 2;
npy_intp dims[] = {5, 10};
double *data = some_function_that_returns_a_double_star(x, y, z);
arr = PyArray_SimpleNewFromData(nd, dims, NPY_DOUBLE, (void *)data);
some_destructor_that_plug_memLeak_due_to_data_star(args);
return arr;
void *memory = PyCapsule_GetPointer(capsule, NULL);
(b) 当我编译上面的代码时,我得到以下警告 -passing argument 1 of ‘(int (*)(PyArrayObject *, PyObject *))*(PyArray_API + 2256u)’ from incompatible pointer type [-Wincompatible-pointer-types]
有什么避免它的想法吗? - senior_mle