problema con el consumo de memoria.
Francesc Altet
faltet en carabos.com
Lun Oct 3 19:25:49 CEST 2005
A Dijous 29 Setembre 2005 13:51, Daniel Jiménez va escriure:
> hp = calloc()
> (calcula hp)
> PyList_SET_ITEM(ListaHp,i,...(char *)hp) );
Mmmm, nunca he visto que puedas asignar una cadena C a una lista con
un PyList_SET_ITEM. Te aconsejaria que la convirtieras primero a una
cadena Python:
PyObject *pstr;
pstr = PyString_FromString((char *)hp);
PyList_SET_ITEM(ListaHp,i,pstr);
y ahora, lo más importante:
Py_DECREF(pstr);
Tienes que dereferenciar pstr ya que si no te quedan dos apuntadores a
la cadena python: tu extension y la lista. En el futuro, cuando Python
suelte la lista, las cadenas que lo forman no se soltarán si tu no
sueltas su referencia en la extensión. Consulta:
http://docs.python.org/api/refcountDetails.html
para más detalles. Es un error típico en el que caemos muchos :-/
> PyList_SET_ITEM(ListaSalida,0,(PyObject *)ListaHp);
Lo mismo aquí, después tienes que llamar a:
Py_DECREF(ListaHp);
--
>0,0< Francesc Altet http://www.carabos.com/
V V Cárabos Coop. V. Enjoy Data
"-"
Más información sobre la lista de distribución Python-es