Hola a todos, este es mi primer post asi que mucho gusto de participar en esta comunidad! :D :laugh: ;-)
Bueno al grano, tengo un codigo en c que me devuelve un segmentation fault. Se que es problema de reservar memoria pero no sé cuando ni como. Agradeceria mucho que alguien me explicara por que pasa:
el codigo calcula fibonacci recursivamente, no hagais caso de la llamada, pensad que los valores se entran correctamente.
llamada del main:
.
.
.
int *s
rfib(s,0,s);
void rfib(int *fib, int x, int *last)
{
if (x==0){
*fib=0;
}
if (x==1)
*fib=1;
else if (x>1)
*fib=fib[-1]+fib[-2];
if (fib+1!=last)
rfib(fib++,x++,last);
}
Bienvenido al foro.
Primera lección: El código etiquétalo con las etiquetas GeSHi correspondientes... así aparecerá coloreado y con un formato más legible.
rfib(fib++,x++,last);
Eso son postincrementos... es decir, es equivalente a:
rfib( fib, x, last );
fib++;
x++;
Vamos que estás haciendo la misma llamada todo el tiempo.
Además, en tu ejemplo pasas:
rfib(s,0,s);
Es decir, fib == last, luego...
if( fib+1 != last )
va a ser siempre cierto... más bien debería ser
if ( fib != last )
PD.: parto de la base de que *s está debidamente inicializado.
Un saludo.
Muchas gracias! no sabes las vueltas que le he dado al codigo y no me había fijado en que no se pueden pasar parametros tipo x++ a una funcion ;D ;D
Repito muchisimas gracias!
nos vemos pronto, 1 saludo!
Bueno x++ lo que va a hacer es incrementar despues de la llamada a la funcion, pero podrias llamar a la funcion con ++x, que incrementaria antes de la llamada.
int main()
{
int x = 10;
//Imprime:
func(x); // 10
cout << endl;
func(x++); // 10
func(x); // 11
cout << endl;
func(++x); // 12
func(x); // 12
cout << endl;
return 0;
}
void func(int x)
{
cout << x << endl;
}
Saludos
En las llamadas a función es mejor poner +1
Asi te quitas de ambiguedades y errores tontos. Además escribes lo mismo.