我正在C++ Python扩展中构建一组嵌套的元组。但是,我在管理引用计数方面遇到了一些问题。使用PyTuple_SetItem时出现内存泄漏
的最少的代码来重新创建此内存泄漏:
PyObject *outer = PyTuple_New(outer_size);
for (size_t index = 0; index < outer_size; ++index) {
PyObject *inner = Py_BuildValue("iiiiiiiiid", ...);
PyTuple_SetItem(outer, index, inner);
}
Py_CLEAR(outer);
Py_INCREF(Py_None);
return Py_None;
现在,如果我不是一个Py_CLEAR(inner)
更换PyTuple_SetItem(outer, index, inner)
,内存使用量不会随时间而增长。
我错了有关外元组偷参考内部的元组?有没有其他原因记忆不会被回收?
代码应不漏气。我想补充称吃着检查每个API函数的返回值并显示的代码背后隐藏了'...'。 – sterin 2012-03-03 04:32:56