El 27/06/2011 12:00, iescriva escribió:
El 27/06/11 06:14, Anthony escribió:
/otrasfunciones.c: In function âfactoâ:
otrasfunciones.c:18: warning: passing argument 1 of âfactoâ makes
pointer from integer without a cast
Aquí te esta diciendo el compilador que estas creando un puntero desde
un entero. Es por la linea: "result = n*facto(n-1);" ya que facto espera
un vector y n es un entero.

otrasfunciones.c:9: note: expected âFunctionCallInfoâ but argument is of
type âintâ/
Te dice que facto espera un tipo "FunctionCallInfo" pero le estas
pasando un int.(lo de la linea 18).

La función espera un puntero al vector de argumentos así que al usar el
entero como un puntero accede fuera de su zona de memoria y por eso te
cierra el servidor.

no tienes que pasarle n-1 sino un vecto de argumentos del tipo que
espera facto(supongo que FunctionCallInfo).

Así que necesitarás construir ese vector y utilizarlo en la linea 18.
No tengo mucha experiencia en postgres usando C, yo crearía una función
que espere un entero y calcularía el factorial en ella.

int factorial(int n){
   if(n)
     return n*factorial(n-1);
   else
     return 1;
}

Datum
facto(PG_FUNCTION_ARGS)
{
    int32 n = PG_GETARG_INT32(0);
    int32 result;
    result=factorial(n)
    PG_RETURN_INT32(result);
}
-
Enviado a la lista de correo pgsql-es-ayuda ([email protected])
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


wowwww, esa solución me funciono, separando las funciones , no sabia que para postgresql se podia hacer funciones así , como en la documentación solo hablan del uso de las macros esas con el Datum , que bien gracias.
saludos
-
Enviado a la lista de correo pgsql-es-ayuda ([email protected])
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a