Bất cứ khi nào tôi gọi chức năng của mình, mức sử dụng bộ nhớ tăng khoảng 10 triệu mỗi cuộc gọi, vì vậy tôi nghĩ rằng có một số rò rỉ bộ nhớ ở đây.Tôi nên đặt Py_INCREF và Py_DECREF vào khối này trong phần mở rộng của Python C ở đâu?
....
PyObject *pair = PyTuple_New(2), *item = PyList_New(0);
PyTuple_SetItem(pair, 0, PyInt_FromLong(v[j]));
if(v[j] != DISTANCE_MAX && (p[j] || d[0][j])){
jp=j;
while(jp!=istart) {
PyList_Append(item, PyInt_FromLong(jp));
jp=p[jp];
}
PyList_Append(item, PyInt_FromLong(jp));
PyList_Reverse(item);
}
PyTuple_SetItem(pair, 1, item);
return pair;
....
Khi tôi đọc document, một số cuộc gọi như
void
bug(PyObject *list)
{
PyObject *item = PyList_GetItem(list, 0);
PyList_SetItem(list, 1, PyInt_FromLong(0L));
PyObject_Print(item, stdout, 0); /* BUG! */
}
cần phải đưa số lượng tài liệu tham khảo như thế này
void
no_bug(PyObject *list)
{
PyObject *item = PyList_GetItem(list, 0);
Py_INCREF(item);
PyList_SetItem(list, 1, PyInt_FromLong(0L));
PyObject_Print(item, stdout, 0);
Py_DECREF(item);
}
Vì vậy, tôi nên đặt Py_INCREF và Py_DECREF ở đâu trên chức năng của tôi?
Vậy ... anh ấy nên đặt 'Py_INCREF' và' Py_DECREF' ở đâu? Bạn không trả lời câu hỏi của mình. – agf