Re: ayuda con función en C

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);
}

In response to

Responses

Browse pgsql-es-ayuda by date

  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