Ayuda Acerca De Listas y Listas Circulares (Revienta Memoria :S)

Iniciado por Gerik, 12 Septiembre 2010, 01:49 AM

0 Miembros y 1 Visitante están viendo este tema.

Gerik

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 (cpp) [Seleccionar]
# include <conio>
# include <iostream>
# include <stdlib>
# define cant 4

class nodo
     {public:
      int info;
      nodo *sig;
      nodo(int a)
          {info=a;
           sig=NULL;}
      };
class listac
     {public:
      nodo *cab;
      listac(){cab=NULL;}
      void insertar(int a);
      void mostrar();
      bool buscar(int a);
      void extraer(int a);
      };

int main()
    {int a=0;
     listac obj;
     for(int i=1;i<=cant+1;i++)
         {cout<<"Digite El Elemento "<<i<<" De La Lista: ";
          cin>>a;
          cout<<endl;
          obj.insertar(a);}
     obj.mostrar();
     cout<<"Digite El Numero a Buscar: ";
     cin>>a;
     if(obj.buscar(a)==true)
        cout<<"El Numero Buscado Existe En La Lista";
     else
        cout<<"El Numero Buscado No Existe En La Lista";
     cout<<"Digite El Numero a Extraer De La Lista: ";
     cin>>a;
     obj.extraer(a);
     obj.mostrar();
     getch();
     return 0;
    }

void listac::insertar(int a)
    {nodo *nuevo=new nodo(a);
     if(!cab)
        {nuevo->sig=nuevo;
         cab=nuevo;}
        else
        {nuevo->sig=cab->sig;
         cab->sig=nuevo;}
    }//cierro Insertar
void listac::mostrar()
    {nodo *p=cab;
     do{p=p->sig;
        cout<<p->info<<" ";}
     while(p!=cab);
    }
bool listac::buscar(int a)
   {nodo *p=cab;
    do{p=p->sig;
       if(p->info==a)
          {return true;}}
       while (p!=cab);
       return false;}
void listac::extraer(int a)
     {nodo*p=cab;
      do{p=p->sig;
         if(p->info=a)
            {while(cab->sig!=p)
                  {cab=cab->sig;
                   cab->sig=p->sig;
                   delete p;
                   break;}//cierro while
            }//cierro if
        }//cierro do
        while (p!=cab);
     }