PyObject_CallMethod muere al salir del metodo.

Maurizio Panniello maurix78 en wanadoo.es
Sab Oct 18 18:17:14 CEST 2003



Chema Cortés wrote:

>-----BEGIN PGP SIGNED MESSAGE-----
>Hash: SHA1
>
>El Viernes, 17 de Octubre de 2003 20:02, Maurizio Panniello escribió:
>
>Todavía no me he metido a fondo con las extensiones en C, pero en...
>
>  
>
>>int fun_f (const gsl_vector* par,void *self, gsl_vector* f) {
>>   PyObject *tpar=PyTuple_New(par->size);
>>   PyObject *resid, *lob;
>>   PyArrayObject *aresid;
>>   size_t i;
>>   //Generamos una lista con los parametros:
>>   for (i=0; i<par->size; i++)
>>      PyTuple_SetItem(tpar, i , Py_BuildValue("d",par->data[i]) );
>>
>>   //Llamamos al metodo _F(params):
>>   printf("?1");
>>   lob=PyObject_CallMethod((PyObject*)self, "_FF", "(O)", tpar);
>>    
>>
>
>¿por qué construyes una nueva tupla a partir de tpar? ¿no bastaría con poner 
>"O" como cadena de formato?
>
No, no vale, lo descubrí en el manual, CallMethod siempre quiere una 
tupla, incluso si llamas a una
función sin argumentos tienes que poner un formato "()" para que genere 
una tupla vacias:
http://www.python.org/doc/current/ext/callingPython.html

>
>  
>
>>//<----------------------------Aquí falla!
>>    
>>
>
>¿Puedes poner el error que te da?
>  
>
Segmetation Fault, claramente! Entre ayer y hoy creo de no haber visto 
nunca en mi vida tantos Seg. fault!! ;))
Ya resolví el problema por mi cuenta!! Pero es una pena que no pueda 
comentar a la lista porque... lo resolví sin darme cuenta al reducir el 
programa a minimos factores y ahora ya no se donde estaba el fallo!!!
Si lo descubro lo contaré a la lista.
Esto si, tiengo que dar las gracias a gdb !! Se me ocurrió como poderlo 
usar en una extención de python : llamas a gdb con python e importas el 
programa cuando legfultea (menuda palabrota) me dice en que linea y la 
función que lo provoca. Es un poco lento pero siempre mas rapido y 
comodo de poner printf (y fflush) por todos lados que además no puedes 
poner dentro del codigo del mismo python.

>  
>
>>   printf("?2"); // <----------- esto nunca lo alcanza!!!
>>   Py_DECREF(tpar);
>>...........
>>    
>>
>
>- -- 
>Chema Cortes (py en ch3m4.org)
>  http://py.ch3m4.org
>    PGPKEY: mailto:pgpkey en ch3m4.org?subject=__PGPKEY__
>
>-----BEGIN PGP SIGNATURE-----
>Version: GnuPG v1.2.2-rc1-SuSE (GNU/Linux)
>
>iD8DBQE/kWA1HLTQrABk8H0RAqn/AJ0UvuoRBTOA25FIysJQ2Bn/O0exOACfSG/c
>C+Q/zqSqDDlYQ7YsocEhbRM=
>=HOp7
>-----END PGP SIGNATURE-----
>
>_______________________________________________
>Python-es mailing list
>Python-es en aditel.org
>http://listas.aditel.org/listinfo/python-es
>
>  
>

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20031018/affcc819/attachment.html>
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es