Python 嵌入到 C++ 中
Python embed into 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, 0, pValue);
PyObject_CallObject(pFunc_insert, pArgs);
Py_XDECREF(pArgs);
}
Py_XDECREF(pValue);
}
......do sth.......
}
PyTuple_SetItem
steals 对项目的引用。您不需要 减少该项目的引用,因为您不再拥有对它的引用。您确实需要减少元组的引用。
如果在那之后你仍然遇到段错误,那么你还有其他错误。
我有 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.......
}
PyTuple_SetItem
steals 对项目的引用。您不需要 减少该项目的引用,因为您不再拥有对它的引用。您确实需要减少元组的引用。
如果在那之后你仍然遇到段错误,那么你还有其他错误。