gpt4 book ai didi

python - PyObject_CallMethod 泄漏/段错误

转载 作者:行者123 更新时间:2023-11-30 19:04:56 26 4
gpt4 key购买 nike

我从 C 调用 Python 方法,10 小时后 PyObject_CallMethod 出现泄漏/段错误。

你能检查一下我的代码吗?我的错误在哪里?缺少一些东西吗?

C 代码:

PyObject *pFrameAsList = PyList_New(0);
...
for (int k=0; k<m_nbImages; ++k)
{
PyObject *pFrameAsArray = toNDArray(frame);
...
PyList_Append(pFrameAsList, pFrameAsArray);
Py_DECREF(pFrameAsArray);
}
PyObject *pValue = PyObject_CallMethod(pInstance, "analyseFrame", "(O)", pFrameAsList);
...
Py_INCREF(pValue);
...
for (int k=0 ; k<max; k++ )
{
PyObject *ptemp = PyList_GetItem(pValue,k);
}
Py_DECREF(pFrameAsList);
Py_DECREF(pValue);

以及 Python 代码:

def analyseFrame(self, frame):
results = self.model.analyse(np.asarray(frame))
return list(results)

最佳答案

我认为问题在于您不应该有以下行:

Py_INCREF(pValue)

原因是 PyObject_CallMethod 已经为您增加了引用计数。如果您执行额外的 Py_INCREF 调用,则给定 PyObject 的引用计数将永远不会变为 0。

根据文档,PyObject_CallMethod returns a new reference .

要了解“新引用”相对于“借用引用”的含义,请查看 Reference Count Details 的第一段文档部分:

关于python - PyObject_CallMethod 泄漏/段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50878134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com