Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Gerik en 12 Septiembre 2010, 01:49 am



Título: Ayuda Acerca De Listas y Listas Circulares (Revienta Memoria :S)
Publicado por: Gerik en 12 Septiembre 2010, 01:49 am
Tengo Un Problema al intentar Extraer un numero de la lista, me revienta memoria, alguien podria decirme por que es :S le he dado vueltas y nada
Código
  1. # include <conio>
  2. # include <iostream>
  3. # include <stdlib>
  4. # define cant 4
  5.  
  6. class nodo
  7.     {public:
  8.      int info;
  9.      nodo *sig;
  10.      nodo(int a)
  11.          {info=a;
  12.           sig=NULL;}
  13.      };
  14. class listac
  15.     {public:
  16.      nodo *cab;
  17.      listac(){cab=NULL;}
  18.      void insertar(int a);
  19.      void mostrar();
  20.      bool buscar(int a);
  21.      void extraer(int a);
  22.      };
  23.  
  24. int main()
  25.    {int a=0;
  26.     listac obj;
  27.     for(int i=1;i<=cant+1;i++)
  28.         {cout<<"Digite El Elemento "<<i<<" De La Lista: ";
  29.          cin>>a;
  30.          cout<<endl;
  31.          obj.insertar(a);}
  32.     obj.mostrar();
  33.     cout<<"Digite El Numero a Buscar: ";
  34.     cin>>a;
  35.     if(obj.buscar(a)==true)
  36.        cout<<"El Numero Buscado Existe En La Lista";
  37.     else
  38.        cout<<"El Numero Buscado No Existe En La Lista";
  39.     cout<<"Digite El Numero a Extraer De La Lista: ";
  40.     cin>>a;
  41.     obj.extraer(a);
  42.     obj.mostrar();
  43.     getch();
  44.     return 0;
  45.    }
  46.  
  47. void listac::insertar(int a)
  48.    {nodo *nuevo=new nodo(a);
  49.     if(!cab)
  50.        {nuevo->sig=nuevo;
  51.         cab=nuevo;}
  52.        else
  53.        {nuevo->sig=cab->sig;
  54.         cab->sig=nuevo;}
  55.    }//cierro Insertar
  56. void listac::mostrar()
  57.    {nodo *p=cab;
  58.     do{p=p->sig;
  59.        cout<<p->info<<" ";}
  60.     while(p!=cab);
  61.    }
  62. bool listac::buscar(int a)
  63.   {nodo *p=cab;
  64.    do{p=p->sig;
  65.       if(p->info==a)
  66.          {return true;}}
  67.       while (p!=cab);
  68.       return false;}
  69. void listac::extraer(int a)
  70.     {nodo*p=cab;
  71.      do{p=p->sig;
  72.         if(p->info=a)
  73.            {while(cab->sig!=p)
  74.                  {cab=cab->sig;
  75.                   cab->sig=p->sig;
  76.                   delete p;
  77.                   break;}//cierro while
  78.            }//cierro if
  79.        }//cierro do
  80.        while (p!=cab);
  81.     }
  82.  
  83.