Python嵌入C ++

问题描述

我有python代码融入C ++。 我是否需要release memory(Py_XDECREF) PyObject * pValue和PyObject * pArgs?

当我执行Py_XDECREF(pArgs)和Py_XDECREF(pValue)时,我遇到了分段错误(内核已转储)。 我认为python方面仍在使用这些变量,而c ++尝试释放内存。 此问题的最佳做法是什么?

for(int i=0; i < 100: i++){
        .......do sth.......
    if (pModule != NULL) {
            std::string st = jps.updateZone(worldx_y,lenVect);                          
            PyObject* pValue = PyBytes_FromString(st.c_str());
            if (pFunc_insert && PyCallable_Check(pFunc_insert)) {
                PyObject *pArgs = PyTuple_New(1);
                PyTuple_SetItem(pArgs,pValue);
                PyObject_CallObject(pFunc_insert,pArgs); 
                Py_XDECREF(pArgs);                               
            } 
            Py_XDECREF(pValue);              
    }
        ......do sth.......

}

解决方法

PyTuple_SetItem steals对该项目的引用。您不需要,因为您不再拥有对该项目的引用,因此无需对其进行解密。您要做需要对元组进行解引用。

如果此后仍然出现段错误,则说明还有其他错误。