Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

Next:From: kervin licettDate: 2011-06-27 17:04:51
Subject: hi
Previous:From: Gustavo GarayDate: 2011-06-27 14:53:23
Subject: Re: Procedural Language

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group