Numpy 使用PyArray_SimpleNew创建PyArrayObject的分段错误

Numpy 使用PyArray_SimpleNew创建PyArrayObject的分段错误,numpy,c-api,Numpy,C Api,我正在为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会产生分段错误。知道问题出在

我正在为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会产生分段错误。知道问题出在哪里吗?

我需要在init函数中包含import\u数组,如下所示。我不知道import\u数组做什么,但解决了这个问题

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

PS:知道为什么必须在PyMODINIT_函数中调用import_数组会很好。如果有人知道,请解释。

可能会有帮助,您是否致电import_array?哦,谢谢。我只是发布了一个解决方案,因为我以前没有检查你的评论。无论如何,它确实解决了问题。现在的问题是为什么?void import_arrayvoid:必须在使用C-API的模块的初始化部分调用此函数。它导入存储函数指针表的模块,并将正确的变量指向该模块。文本复制自NumPy C-API文档。