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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


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

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Violación de Segmento
« en: 24 Abril 2014, 01:25 am »

Hola a todos, bueno jeje  ;D, estoy realizando una programa para mi escuela en c++ bajo una máquina virtual en Linux (AntiX), el programa se basa en realizar la suma de los n primeros números enteros impares a través de una función recursiva, es decir, si tecleamos 3, el resultado será 9 que es la suma de 1 más 3 más 5.

Esta practica debe aceptar numerotes muy grandotes, por ello estoy empleando el tipo de dato mpz_t de la librería gmp.h, el problema que tengo es a mi parecer raro puesto que si pongo por ejemplo el numero 130000 me dice que la suma es 16900000000 , pero si pongo 130960 dice: Violacion de segmento. (El programa permite al usuario volver a ingresar otro numero si asi lo desea).

Lo extraño viene cuando despues vuelvo a correr el programa e ingreso el numero 130000, me da el resultado, luego ingreso 130920, me da el resultado, despues ingreso 130940, da el resultado y despues pongo exactamente el 130960 y ahora si sale el resultado (17150521600), pero ahora si pongo un numero mas grande vuelve a salir: Violacion de segmento.  :-(

Mi código es el siguiente (anexo solamente el main y la funcion recursiva):

int main() {
   mpz_t numero,sum,resta,resta2,mul;
   int again;
   //double n, sum;
   
   mpz_init(numero);
   mpz_init(sum);
   mpz_init(resta);
   mpz_init(resta2); 
   mpz_init(mul);
   
   system("clear");
   cout<<"\t\tBienvenido a la Practica 3"<<endl<<endl;
   
   do {
      pedir(numero);

      gmp_printf("tu numero  es: %Zd \n", numero);

      mpz_set_str(sum,"0", 10); //inicializo sum
      mpz_set_str(resta,"0", 10); //inicializo resta
      mpz_set_str(resta2,"0", 10); //inicializo resta2
      mpz_set_str(mul,"0", 10); //inicializo mul
      suma(numero,resta,sum,mul,resta2);
 
      gmp_printf("La suma es: %Zd \n", sum);

      again = otraVez("\n\tDeseas ingresar otro numero ");
     }while(again == 1);
   return 0;
  }

// Funcion recursiva

void suma(mpz_t n,mpz_t resta,mpz_t sum,mpz_t mul,mpz_t resta2) {
   if((mpz_cmp_ui(n, 1)) == 0  ||  (mpz_cmp_ui(n, 1)) < 0){  // n<=1
      mpz_add_ui(sum, sum, 1);
   }
   else{
      mpz_mul_ui(mul, n, 2);
      mpz_sub_ui(resta2, mul, 1);
      mpz_add(sum, sum, resta2);
      mpz_sub_ui(resta, n, 1);
      suma(resta,resta,sum,mul,resta2);   
   }
}


¿Alguno de ustedes sabe como puedo corregir esto?

De antemano gracias por su ayuda.


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Violación de Segmento
« Respuesta #1 en: 24 Abril 2014, 04:11 am »

puedes intentar hacer debug a tu codigo a ver donde se da la violacion :P lo más probable es que se dé porque no especificaste la precisión en bytes o porque no inicializaste un numero (las 2 razones más comunes que me dio a mi esa librería)


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con violación de segmento « 1 2 »
Programación C/C++
Triper0 17 16,535 Último mensaje 8 Noviembre 2015, 21:34 pm
por alesurf1989
ayuda violacion de segmento?
Programación General
nightcode 7 3,999 Último mensaje 31 Diciembre 2013, 18:32 pm
por nightcode
Error Violacion de segmento en programa en c
Programación C/C++
nohelyma 2 2,748 Último mensaje 25 Junio 2014, 08:30 am
por eferion
Ultima duda de snakecode (violación de segmento)
Programación C/C++
pacosn1111 0 1,446 Último mensaje 24 Abril 2015, 19:35 pm
por pacosn1111
Violacion segmento en C Linux
Programación C/C++
Xin_J.D 2 2,306 Último mensaje 31 Marzo 2018, 00:33 am
por BloodSharp
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines