From: | iescriva <iescriva(at)gmail(dot)com> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: ayuda con función en C |
Date: | 2011-06-27 16:00:49 |
Message-ID: | 4E08A931.5050208@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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);
}
From | Date | Subject | |
---|---|---|---|
Next Message | kervin licett | 2011-06-27 17:04:51 | hi |
Previous Message | Gustavo Garay | 2011-06-27 14:53:23 | Re: Procedural Language |