mamba41ife 2023-12-27 20:40 采纳率: 100%
浏览 19
已结题

Python C API从C++中向python传递数组问题

最近在编写有关Python C API相关的程序。
需要从C++中向python传递一个自定义的矩阵,类似二维数组,存储了一些点的xyz坐标信息。
C++的其中部分代码如下

pPointList = PyList_New(mNbOfVertex);
        //先处理点
        for (int i=0; i<mNbOfVertex; i++)
        {
            pList = PyList_New(3);
            PyList_SET_ITEM(pList,0,PyFloat_FromDouble(oVertexMat->getMatrixCell(i,0)));
            PyList_SET_ITEM(pList,1,PyFloat_FromDouble(oVertexMat->getMatrixCell(i,1)));
            PyList_SET_ITEM(pList,2,PyFloat_FromDouble(oVertexMat->getMatrixCell(i,2)));
            PyList_Append(pPointList,pList);
            Py_DECREF(pList);
        
        }
        pArgs = PyTuple_New(1);
        PyTuple_SetItem(pArgs,0,Py_BuildValue("O",pPointList));
        if (pArgs == NULL)
        {
            AfxMessageBox(_T("参数传递失败"));
            return E_FAIL;
        }
        
        pReturn =PyEval_CallObject(pFunc,pArgs);
        
        if (pReturn==NULL)
        {
            cout<<"程序未正确返回值"<<endl;
        }
        float nResult=0;
        cout<<"nResult is "<<nResult<<endl;
        PyArg_Parse(pReturn,"f",&nResult);
        cout <<"return is " <<nResult<<endl;

在python中进行一些读写的测试,python程序如下

def build_index(iVertexList):

    a = iVertexList[-25][1]
    return a

测试时发现,iVertexList的第一个下标使用负下标时,程序能正常返回值,但是如果第一个下标使用正值时,就会报错。请问什么原因?

  • 写回答

2条回答 默认 最新

  • mamba41ife 2023-12-28 11:13
    关注

    CNEXT.exe 中的 0x00007ffe39c70ae1 处最可能的异常: 0xC0000005: 写入位置 0x0000000000000000 时发生访问冲突
    CNEXT.exe 中的 0x00007ffe39c70ae1 处未处理的异常: 0xC000041D: 用户回调期间遇到未经处理的异常。
    我怀疑应该跟指针有关 但是具体的问题不太清楚

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月5日
  • 已采纳回答 12月28日
  • 创建了问题 12月27日