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