PyArray_Check / PyArray_CheckExact给出了分段错误

时间:2017-03-16 12:46:46

标签: python c++ numpy boost-python

在c ++中,我定义了以下模块:

#include <boost/python.hpp>
#include <numpy/arrayobject.h>

bool foo(PyObject *obj)
{
    if (!PyArray_CheckExact(obj))
        return false;

    PyArrayObject* arr = reinterpret_cast<PyArrayObject*>(obj);

    if (PyArray_NDIM(arr) != 2)
        return false;

    return true;    
}

BOOST_PYTHON_MODULE(pyMod)
{
    using namespace boost::python;

    import_array();

    def("foo", foo);
}

在python中,我执行以下操作

import numpy as np
import myMod

if __name__ == "__main__":
    arr = np.zeros(shape=(100, 100), dtype=np.uint8)

    myMod.foo(arr)

这在执行对PyArray_CheckExact的调用时会出现分段错误。删除检查,函数运行正常,并且转换成功。

我试过了:

bool foo(PyObject *obj)
{
    if (obj->ob_type->ob_type != &PyArray_Type)
        return false;

    PyArrayObject* arr = reinterpret_cast<PyArrayObject*>(obj);

    if (PyArray_NDIM(arr) != 2)
        return false;

    return true;    
}

其中还有段错误。似乎Numpy API中的某些内容未正确初始化。我在Windows上使用Anaconda2 32bit。

关于为什么会出现这种段错误的想法?

0 个答案:

没有答案