Cada vez que llamé a mi función, el uso de la memoria aumenta alrededor de + 10M por llamada, así que creo que hay alguna pérdida de memoria aquí.¿Dónde debería poner Py_INCREF y Py_DECREF en este bloque en la extensión Python C?
....
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;
....
cuando leí document, algunas llamadas como
void
bug(PyObject *list)
{
PyObject *item = PyList_GetItem(list, 0);
PyList_SetItem(list, 1, PyInt_FromLong(0L));
PyObject_Print(item, stdout, 0); /* BUG! */
}
necesidad de poner los contadores de referencia como éste
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);
}
Así que, ¿Dónde debo poner Py_INCREF y Py_DECREF en mi función?
Entonces ... ¿dónde debería poner 'Py_INCREF' y' Py_DECREF'? No respondiste su pregunta. – agf