elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  puntero, funcion recursiva y segmentation fault
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: puntero, funcion recursiva y segmentation fault  (Leído 2,907 veces)
evilraziel

Desconectado Desconectado

Mensajes: 3



Ver Perfil
puntero, funcion recursiva y segmentation fault
« en: 2 Abril 2014, 16:32 pm »

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


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: puntero, funcion recursiva y segmentation fault
« Respuesta #1 en: 2 Abril 2014, 16:45 pm »

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.

Código
  1. rfib(fib++,x++,last);

Eso son postincrementos... es decir, es equivalente a:

Código
  1. rfib( fib, x, last );
  2. fib++;
  3. x++;

Vamos que estás haciendo la misma llamada todo el tiempo.

Además, en tu ejemplo pasas:

Código
  1. rfib(s,0,s);

Es decir, fib == last, luego...

Código
  1. if( fib+1 != last )

va a ser siempre cierto... más bien debería ser

Código
  1. if ( fib != last )

PD.: parto de la base de que *s está debidamente inicializado.
Un saludo.


« Última modificación: 2 Abril 2014, 16:50 pm por eferion » En línea

evilraziel

Desconectado Desconectado

Mensajes: 3



Ver Perfil
Re: puntero, funcion recursiva y segmentation fault
« Respuesta #2 en: 2 Abril 2014, 18:53 pm »

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!
En línea

noele1995

Desconectado Desconectado

Mensajes: 137



Ver Perfil
Re: puntero, funcion recursiva y segmentation fault
« Respuesta #3 en: 2 Abril 2014, 20:28 pm »

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.
Código
  1. int main()
  2. {
  3. int x = 10;
  4.                     //Imprime:
  5. func(x);     // 10
  6. cout << endl;
  7.  
  8. func(x++);   // 10
  9. func(x);     // 11
  10. cout << endl;
  11.  
  12. func(++x);   // 12
  13. func(x);     // 12
  14. cout << endl;
  15.        return 0;
  16. }
  17.  
  18. void func(int x)
  19. {
  20. cout << x << endl;
  21. }

Saludos
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: puntero, funcion recursiva y segmentation fault
« Respuesta #4 en: 3 Abril 2014, 02:13 am »

En las llamadas a función es mejor poner +1

Asi te quitas de ambiguedades y errores tontos. Además escribes lo mismo.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Segmentation fault (core dumped)
Programación C/C++
neveldine 3 5,665 Último mensaje 3 Mayo 2012, 17:03 pm
por neveldine
Segmentation Fault al realizar funcion sobre Matriz « 1 2 »
Programación C/C++
Manu_The_King 15 7,000 Último mensaje 5 Enero 2013, 21:53 pm
por avesudra
Error llamada recursiva Puntero C
Programación C/C++
aisak77 2 1,849 Último mensaje 30 Enero 2017, 13:44 pm
por Kenji-chan
Segmentacion Fault al llamar a la funcion free con un puntero creado con malloc
Programación C/C++
Gallu 2 2,698 Último mensaje 1 Noviembre 2017, 20:21 pm
por Gallu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines