我正在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