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


 


Tema destacado: Análisis del vídeo del hackeo al Sindicato de los Mossos de Esquadra


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  ayyuda con codigo que se crasea al ejecutarlo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayyuda con codigo que se crasea al ejecutarlo  (Leído 300 veces)
DobleGa

Desconectado Desconectado

Mensajes: 4


Ver Perfil
ayyuda con codigo que se crasea al ejecutarlo
« en: 6 Mayo 2017, 12:55 »

Hola este es mi primer tema y me gustaria si alguine podria ayudarme por que estoy haciendo un programa y se me esta colgando todo el rat, no encuentro ningun error si alguien es tan amable para ayudarme, se lo agradeceria mucho.
Soy relativamente nuevo en este mundo de la programacion y cualquier consejo para solucionar este problema se lo agradeceria mucho

 creo que el problema tiene que ver con algo de punteros pero no estoy seguro

este es el main cpp
Código
  1. #include <iostream>
  2. #include "usalibro.h"
  3. #include "UsaBibliografia.h"
  4. #include "bibliografia.h"
  5. #include <cstring>
  6. #include <stdlib.h>
  7. #include <stdio.h>
  8.  
  9.  
  10. using namespace std;
  11.  
  12. void menu();
  13.  
  14. int main()
  15. {
  16.    menu();
  17.    return 0;
  18. }
  19.  
  20. void menu(){
  21.    int opcion, control=0;
  22.    tbibliografia bd;
  23.    tlibro t;
  24.    do{
  25.    cout<< "1.- Crear bibliografía" << endl;
  26.    cout<< "2.- Añadir libro "<< endl;
  27.    cout<< "3.- Modificar año de libro" << endl;
  28.    cout<< "4.- Listar libros por ISBN" << endl;
  29.    cout<< "5.- Listar libros por orden decreciente de año" << endl;
  30.    cout<< "6.- Terminar" << endl;
  31.    cout<< "Elegir opción:"<< endl;
  32.    cin >> opcion;
  33.    switch(opcion){
  34.    case 1:{
  35.        if(control==0){
  36.            crear(bd);
  37.            control=1;
  38.            cout<<"Se ha creado la bibliogarfia"<<endl;
  39.        }else
  40.            cout<<"Ya habia sido creada la bibliografia, el sistema solo puede manterner a una"<<endl;
  41.  
  42.        }
  43.    break;
  44.    case 2:{
  45.        if(control==0){
  46.            cout<<"Primero tiene que crear la bibliografia, use opcion 1"<<endl;
  47.        }else{
  48.            leerLibro(t);
  49.            anadir(bd,t);
  50.  
  51.      }
  52.  
  53.  
  54.        }
  55.        break;
  56.    case 3:{
  57.        if(control==0)
  58.            cout<<"Primero tiene que crear la bibliografia, use opcion 1"<<endl;
  59.        else{
  60.              cout<<"Introduce ISBN del libro a modificar año"<<endl;
  61.              cin>>t.isbn;
  62.            if(existe(bd,t.isbn)){
  63.                cout<<"Introduce el año que desea intruducir"<<endl;
  64.                cin>>t.ano;
  65.                modificarAnoLibro(bd, t.isbn, t.ano);
  66.  
  67.            }else
  68.                cout<<"El libro no esta en la bibliografia"<<endl;
  69.            }
  70.  
  71.        }
  72.        break;
  73.    case 4:{
  74.        if(control==0)
  75.            cout<<"Primero tiene que crear la bibliografia, use opcion 1"<<endl;
  76.        else{
  77.            mostrarOrdenisbn (bd);
  78.            }
  79.  
  80.        }
  81.        break;
  82.    case 5:{
  83.        if(control==0)
  84.            cout<<"Primero tiene que crear la bibliografia, use opcion 1"<<endl;
  85.        else{
  86.            mostrarOrdenAno(bd);
  87.            }
  88.  
  89.        }
  90.        break;
  91.        }
  92.    }while(opcion!=6);
  93. }

este es el UsaBibliogrsafia.h
Código
  1. #ifndef USABIBLIOGRAFIA_H_INCLUDED
  2. #define USABIBLIOGRAFIA_H_INCLUDED
  3. #include <iostream>
  4. #include "bibliografia.h"
  5. #include "usalibro.h"
  6. #include <cstring>
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9.  
  10. using namespace std;
  11.  
  12. void copiaBibliografia (tbibliografia &nuevo,tbibliografia viejo);
  13. void mostrarOrdenisbn (tbibliografia li);
  14. void mostrarOrdenAno(tbibliografia bibli);
  15.  
  16.  
  17. #endif
este es UsaBibliografia.cpp
Código
  1. #include "UsaBibliografia.h"
  2.  
  3. void copiaBibliografia (tbibliografia &nuevo,tbibliografia viejo){
  4.    int conta,conta2=0;
  5.    crear(nuevo);
  6.    tlibro t;
  7.    conta= numeroLibros (viejo);
  8.    while(conta2<=conta){
  9.        extraerPosicion(viejo, conta2,t);
  10.        anadir(nuevo,t);
  11.        conta2++;
  12.    }
  13. };
  14.  
  15. void mostrarOrdenisbn (tbibliografia li){
  16.    int conta,conta2=0;
  17.    tlibro t;
  18.    conta= numeroLibros (li);
  19.    while(conta2<=conta){
  20.        extraerPosicion(li, conta2,t);
  21.        mostrarLibro(t);
  22.        conta2++;
  23.    }
  24. };
  25. void mostrarOrdenAno(tbibliografia bibli) {
  26.    int conta,conta2=0;
  27.    tlibro t;
  28.    conta= numeroLibros (bibli);
  29.    tbibliografia prueba, prueba2;
  30.    copiaBibliografia(prueba, bibli);
  31.    crear(prueba2);
  32.    while(conta2<=conta){
  33.        masNuevo(prueba,t);
  34.        eliminar(prueba,t.isbn);
  35.        mostrarLibro(t);
  36.        conta2++;
  37.    }
  38.  
  39. };
  40.  
este es bibliografia.h
Código
  1. #ifndef BIBLIOGRAFIA_H_INCLUDED
  2. #define BIBLIOGRAFIA_H_INCLUDED
  3. #include <iostream>
  4. #include "usalibro.h"
  5. #include <cstring>
  6. #include <stdlib.h>
  7. #include <stdio.h>
  8.  
  9. using namespace std;
  10.  
  11. typedef struct _nodo {
  12.   tlibro t;
  13.   struct _nodo *siguiente;
  14. } tipoNodo;
  15.  
  16. typedef tipoNodo *pNodo;
  17. typedef tipoNodo *tbibliografia;
  18.  
  19.  
  20. void crear(tbibliografia &nuevo);
  21. void anadir(tbibliografia &b, tlibro l);
  22. void eliminar(tbibliografia &b, char isbn[]);//mirar
  23. bool bibliografiaSinLibros(tbibliografia b);
  24. void extraer(tbibliografia b, char isbn[], tlibro & l);
  25. int numeroLibros (tbibliografia b);
  26. void extraerPosicion(tbibliografia b, int pos, tlibro &l);
  27. bool existe (tbibliografia b, char isbn[]);
  28. void modificarAnoLibro(tbibliografia &b, char isbn[], int ano);
  29. void masNuevo(tbibliografia b, tlibro &l);
  30.  
  31. #endif
este es bobliografia.cpp
Código
  1. #include "bibliografia.h"
  2.  
  3.  
  4. void crear(tbibliografia &nuevo){
  5.    nuevo=NULL;
  6. }
  7.  
  8. void anadir(tbibliografia &b, tlibro l){
  9.   pNodo nuevo, anterior;
  10.   crear(nuevo);
  11.   copiaLibro((*nuevo).t,l);
  12.   // Si la lista está vacía
  13.   if(bibliografiaSinLibros(b)==true || strcmp(b->t.isbn, l.isbn)>0) {
  14.  
  15.      /* Añadimos la lista a continuación del nuevo nodo */
  16.      nuevo->siguiente = b;
  17.      /* Ahora, el comienzo de nuestra lista es en nuevo nodo */
  18.      b = nuevo;
  19.   }
  20.   else {
  21.      /* Buscar el nodo de valor menor al isbn */
  22.      anterior = b;
  23.      /* Avanzamos hasta el último elemento o hasta que el siguiente tenga
  24.          un valor mayor que el isbn*/
  25.      while(anterior->siguiente && strcmp(anterior->siguiente->t.isbn,l.isbn) <=0)
  26.         anterior = anterior->siguiente;
  27.      /* Insertamos el nuevo nodo después del nodo anterior */
  28.      nuevo->siguiente = anterior->siguiente;
  29.      anterior->siguiente = nuevo;
  30.   }
  31. }
  32.  
  33. void eliminar(tbibliografia &b, char isbn[]){
  34.   pNodo anterior, nodo;
  35.   nodo = b;
  36.   crear(anterior);
  37.  
  38.   while(nodo && strcmp(nodo->t.isbn, isbn)<0) {
  39.      anterior = nodo;
  40.      nodo = nodo->siguiente;
  41.   }
  42.   if(!nodo || strcmp(nodo->t.isbn, isbn)!=0) return;
  43.   else { /* Borrar el nodo */
  44.      if(!anterior) /* Primer elemento */
  45.        b = nodo->siguiente;
  46.      else  /* un elemento cualquiera */
  47.         anterior->siguiente = nodo->siguiente;
  48.      free(nodo);
  49.   }
  50. }
  51.  
  52. bool bibliografiaSinLibros(tbibliografia b){
  53.   return (b == NULL);
  54. }
  55.  
  56. void extraer(tbibliografia b, char isbn[], tlibro & l){
  57.   pNodo anterior;
  58.   anterior = b;
  59.     /* Avanzamos hasta el último elemento o hasta que el siguiente tenga un valor mayor de isbn*/
  60.      while(anterior->siguiente && strcmp(anterior->t.isbn,isbn) <=0){
  61.        if(strcmp(anterior->t.isbn,isbn) ==0)
  62.             copiaLibro(l,anterior->t);
  63.        anterior = anterior->siguiente;
  64.      }
  65. }
  66.  
  67. int numeroLibros (tbibliografia b){
  68.    pNodo anterior;
  69.    anterior = b;
  70.    int conta=0;
  71.      /* Avanzamos hasta el último elemento */
  72.      while(anterior->siguiente){
  73.        conta++;
  74.        anterior = anterior->siguiente;
  75.      }
  76.    return conta;
  77. }
  78.  
  79. void extraerPosicion(tbibliografia b, int pos, tlibro &l){
  80.    pNodo anterior;
  81.    anterior = b;
  82.    int conta=0;
  83.      while(anterior->siguiente && pos>=conta){
  84.        if(pos==conta)
  85.            copiaLibro(l,anterior->t);
  86.        conta++;
  87.        anterior = anterior->siguiente;
  88.      }
  89. }
  90.  
  91. bool existe (tbibliografia b, char isbn[]){
  92.   pNodo anterior;
  93.   anterior = b;
  94.   bool sal=false;
  95.      /* Avanzamos hasta el último elemento o hasta que el siguiente tenga un valor mayor de isbn*/
  96.      while(anterior->siguiente && strcmp(anterior->t.isbn,isbn) <=0){
  97.        if(strcmp(anterior->t.isbn,isbn)==0){
  98.             sal=true;}
  99.        anterior = anterior->siguiente;
  100.      }
  101.  
  102.    return sal;
  103. }
  104.  
  105. void modificarAnoLibro(tbibliografia &b, char isbn[], int ano){
  106.   pNodo anterior;
  107.   anterior = b;
  108.      /* Avanzamos hasta el último elemento o hasta que el siguiente tenga un valor mayor de isbn*/
  109.      while(anterior->siguiente && strcmp(anterior->t.isbn,isbn) <=0){
  110.        if(strcmp(anterior->t.isbn,isbn) ==0){
  111.             anterior->t.ano=ano;
  112.        }
  113.        anterior = anterior->siguiente;
  114.      }
  115. }
  116.  
  117. void masNuevo(tbibliografia b, tlibro &l){
  118.  
  119.   pNodo anterior;
  120.   anterior = b;
  121.   copiaLibro(l,anterior->t);
  122.   anterior = anterior->siguiente;
  123.      /* Avanzamos hasta el último elemento */
  124.      while(anterior->siguiente){
  125.        if(anterior->t.ano > l.ano)
  126.            copiaLibro(l,anterior->t);
  127.        anterior = anterior->siguiente;
  128.      }
  129. }
  130.  

este usalibro.cpp
Código
  1. #include "usalibro.h"
  2.  
  3.  
  4. void leerLibro(tlibro &t){//COMPROBADO
  5.    char isbn[10];
  6.    char titulo[20];
  7.    int ano;
  8.  
  9.    cin.clear();
  10.    cout<<"Introduce el isbn del libro"<<endl;
  11.    cin>>isbn;
  12.    cout<<"Introduce el titulo del libro"<<endl;
  13.    cin>>titulo;
  14.    cout<<"Introduce el año de publicacion del libro"<<endl;
  15.    cin>>ano;
  16.    crearLibro(titulo,t,isbn,ano);
  17.  
  18. }
  19.  
  20. void mostrarLibro(tlibro t){
  21.    char isbn[10];
  22.    char titulo[20];
  23.    int ano;
  24.  
  25.    obtenerTitulo(titulo,t);
  26.    obtenerAno(ano,t);
  27.    obtenerisbn(isbn,t);
  28.    cout<<isbn<<"         "<<titulo<<"         "<<ano<<endl;
  29. }
  30.  
  31. void copiaLibro(tlibro &nuevo,tlibro t){
  32.    char isbn[10];
  33.    char titulo[20];
  34.    int ano;
  35.    obtenerTitulo(titulo,t);
  36.    obtenerAno(ano,t);
  37.    obtenerisbn(isbn,t);
  38.    crearLibro(titulo,nuevo,isbn,ano);
  39. }
  40.  
este es usalibro
Código
  1. #ifndef USALIBRO_H_INCLUDED
  2. #define USALIBRO_H_INCLUDED
  3. #include <iostream>
  4. #include "libro.h"
  5. #include <cstring>
  6.  
  7. using namespace std;
  8.  
  9. void leerLibro(tlibro &t);
  10. void mostrarLibro(tlibro t);
  11. void copiaLibro(tlibro &nuevo, tlibro t);
  12.  
  13.  
  14. #endif
este libro.h
Código
  1. #ifndef LIBRO_H_INCLUDED
  2. #define LIBRO_H_INCLUDED
  3. #include <iostream>
  4. #include <cstring>
  5. #include <stdio.h>
  6. #include <string.h>
  7.  
  8. using namespace std;
  9.  
  10. struct tlibro{
  11.        char isbn[10];
  12.        char titulo[20];
  13.        int ano;
  14. };
  15.  
  16. void crearLibro(char titulo[],tlibro &t,char isbn[],int ano);
  17. void modificarAno(int ano,tlibro &t);
  18. void obtenerTitulo(char titulo[],tlibro t);
  19. void obtenerAno(int &ano,tlibro t);
  20. void obtenerisbn(char isbn[],tlibro t);
  21.  
  22.  
  23. #endif
  24.  
este libro.cpp
Código
  1. #include "libro.h"
  2.  
  3. void crearLibro(char titulo[],tlibro &t,char isbn[],int ano){//comprabado
  4.  
  5.    strcpy(t.isbn,isbn);
  6.    strcpy(t.titulo,titulo);
  7.    t.ano=ano;
  8.    cout<<"sal";
  9. };
  10.  
  11. void modificarAno(int ano,tlibro &t){
  12.    t.ano=ano;
  13. };
  14.  
  15. void obtenerTitulo(char titulo[],tlibro t){
  16.   strcpy(titulo,t.titulo);
  17. };
  18.  
  19. void obtenerAno(int &ano,tlibro t){
  20.    ano=t.ano;
  21. };
  22.  
  23. void obtenerisbn(char isbn[],tlibro t){
  24.   strcpy(isbn,t.isbn);
  25. };
  26.  


« Última modificación: 6 Mayo 2017, 20:50 por DobleGa » En línea

ivancea96


Desconectado Desconectado

Mensajes: 2.951


ASMático


Ver Perfil WWW
Re: ayyuda con codigo que se crasea al ejecutarlo
« Respuesta #1 en: 6 Mayo 2017, 15:37 »

Pero te da problemas cuando haces qué exactamente?


En línea

DobleGa

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: ayyuda con codigo que se crasea al ejecutarlo
« Respuesta #2 en: 6 Mayo 2017, 15:53 »

despues de ejecutar la opcion 2 en el menu, esta llama a la funcion anadir, esta dentro  a copiarlibro y ahi a crear libro que se crea ahi el terminal al ejecutarlo.

si consigues detectar el error me harias un grann favor
« Última modificación: 6 Mayo 2017, 15:56 por DobleGa » En línea

engel lex
CoAdmin
***
Desconectado Desconectado

Mensajes: 11.428



Ver Perfil
Re: ayyuda con codigo que se crasea al ejecutarlo
« Respuesta #3 en: 6 Mayo 2017, 16:09 »

has intentado usar el depurador de tu IDE? (debugger)

te recomiendo intentarlo, es una herramienta muy potente que te ayuda a conseguir cualquier tipo de error, si no hayas como, seguramente en youtube consigues tutoriales del debugger de tu IDE
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.
CalgaryCorpus

Desconectado Desconectado

Mensajes: 43


Ver Perfil
Re: ayyuda con codigo que se crasea al ejecutarlo
« Respuesta #4 en: 6 Mayo 2017, 18:35 »

Estan mal copiados los codigos que presentas.
Edita el post para copiar los contenidos correctos, en particular el codigo fuente de anadir() que, al momento de escribir esto, no se incluye.
En línea

Visita mi perfil en LinkedIn: http://goo.gl/SAaM48
DobleGa

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: ayyuda con codigo que se crasea al ejecutarlo
« Respuesta #5 en: 6 Mayo 2017, 20:51 »

ya lo he modificado, copie mal el codigo del post
En línea

ivancea96


Desconectado Desconectado

Mensajes: 2.951


ASMático


Ver Perfil WWW
Re: ayyuda con codigo que se crasea al ejecutarlo
« Respuesta #6 en: 7 Mayo 2017, 02:28 »

Una de las formas más básicas para encontrar en qué punto el programa tira un error, es poniendos salidas de texto por consola.
Basta que pongas couts hasta encontrar el punto exacto en que el mensaje del cout no se muestra (recuerda poner endl o flush, o sino, aunque el error este después del cout, este podría no mostrarse).

Código
  1. cout
En línea

CalgaryCorpus

Desconectado Desconectado

Mensajes: 43


Ver Perfil
Re: ayyuda con codigo que se crasea al ejecutarlo
« Respuesta #7 en: 7 Mayo 2017, 03:59 »

Tu función crear no pide memoria, hace justo lo contrario, sugiero que pidas memoria, sino obtienes el resultado que ahora tienes.
En línea

Visita mi perfil en LinkedIn: http://goo.gl/SAaM48
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines