【问题标题】:Python embed into C++Python 嵌入到 C++ 中
【发布时间】:2020-12-23 07:03:53
【问题描述】:

我将 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, 0, pValue);
                PyObject_CallObject(pFunc_insert, pArgs); 
                Py_XDECREF(pArgs);                               
            } 
            Py_XDECREF(pValue);              
    }
        ......do sth.......

}

【问题讨论】:

    标签: python c++ python-c-api


    【解决方案1】:

    PyTuple_SetItem steals 对该项目的引用。您不需要取消引用该项目,因为您不再拥有对它的引用。你确实需要减少元组的引用。

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

    【讨论】:

    • 你的意思是我不需要 pValue 和 pARGs?
    猜你喜欢
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多