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