使用PyArray_SimpleNew创建PyArrayObject的分段错误

cidc1ykv  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(73)

我正在为NumPy创建一个C扩展。该函数应该返回一个数组,所以我决定使用PyArray_SimpleNew创建一个尺寸为50x10的PyArrayObject,然后用一些值填充它。下面是代码:

PyArrayObject *a; npy_intp dims[2];
dims[0] = 50; dims[1] = 10;
a = (PyArrayObject *) PyArray_SimpleNew(2, dims, NPY_DOUBLE);

字符串
然而,在第三行创建数组a时产生了Segmentation Fault。你知道问题是什么吗?

mzillmmw

mzillmmw1#

我需要在我的init函数中包含import_array(),如下所示。我不知道import_array()做了什么,但解决了这个问题。

PyMODINIT_FUNC
PyInit_multpy(void)
{
    import_array();
    return PyModule_Create(&multpymodule);
}

字符串
PS:如果知道为什么PyMODINIT_FUNC中必须调用import_array(),那就太好了。如果有人知道,请解释。

相关问题