[C con Clase] puntero a una funcion

Yan gdotta en telefonica.net
Dom Dic 28 02:22:36 CET 2008


Hola Jorge:

A primera vista en la función no veo nada raro, salvo que la memoria para buf la reservas cada vez que llamas a la función y luego no la liberas. Podrías usar realloc().

La traza no la entiendo muy bien ya que no sé si corresponde a una única ejecución de la función o a varias. Me parece que en el breakpoint 3

JM> Breakpoint 3, mdb_sql (cfgsql=0x8014288c5
JM> "gelatos.cl/istegmaier/Maildir", val=0x39 <Error reading address 0x39:
JM> Bad address>) at src/util.c:51
JM> 51          buf = (char *)malloc(len);

val es un puntero con valor no permitido: sería por tanto algo erróneo que ha llegado a la llamada a la función.

Por otro lado, y en ese mismo breakpoint, el texto enviado con cfgsql, no contiene un %s, por lo que la función snprintf recibiría un parámetro más de los que espera, produciendo problemas en la pila.

Como comentario general, hacer una concatenación de 2 strings (si es lo que se pretende) empleando snprintf() y el primero de ellos como string formato, obliga a que este primero termine con %s. Si esto no fuese así, por lo que fuera, y no tuviese el %s o tuviere más de uno u otras secuencias con %, produciría errores difíciles de controlar. Sería más seguro simplemente encadenar las dos cadenas con strncat(), previa comprobación de longitudes.

Hasta otra,
Yan.


Más información sobre la lista de distribución Cconclase