Estoy haciendo un ejercicio de la universidad utilizando las clases nodo y cola. Cuando lo ejecuto en Windows usando geany me muestra el resultado correcto (lo que me dice que el codigo esta bien), el problema es que finalmente me aparece un mensaje que pone "Error ejecutando equis.exe aplicación." y el programa se cierra... ese tipico error en WIndows...
Abri Ubuntu para correrlo ahí y me aparece el siguiente error: "Fallo de segmentación (`core' generado)".
Segun lo que he podido leer en internet, el error viene dado por un manejo incorrecto de la memoria (en el tema de punteros, con el delete y/o el new). Probe varias cosas que consegui, pero sigue igual y ya no tengo ni idea de que puede estarme dando el error s:
Les dejo la implementación de las dos clases para que les echen un ojo:
nodo_t.hpp
Código:
cola_t.hpp#include <iostream> #ifndef nodo_template #define nodo_template using namespace std; template <class T> class nodo{ private: T elemento; nodo<T> *siguiente; public: nodo(); T get_elem(); void set_elem(T e); nodo<T>* get_siguiente(); void set_siguiente(nodo<T> *sigui); ~nodo(); }; //Implementacion :D template <class T> nodo<T>::nodo(){ siguiente = new nodo<T>(); this->elemento='0'; this->siguiente=NULL; } template <class T> T nodo<T>::get_elem(){ return this->elemento; } template <class T> void nodo<T>::set_elem(T e){ this->elemento=e; } template <class T> nodo<T>* nodo<T>::get_siguiente(){ return this->siguiente; } template <class T> void nodo<T>::set_siguiente(nodo<T> *sigui){ this->siguiente=sigui; } template <class T> nodo<T>::~nodo(){ elemento='0'; delete siguiente; } #endif
Código:
Espero que me puedan ayudar! #ifndef cola_template #define cola_template #include <iostream> #include "nodo_t.hpp" using namespace std; template <class T> class cola{ private: nodo<T> *frente, *final; int cantidad; public: cola(); bool es_vacia(); int longitud(); // void encolar(T e); void desencolar(); //precondicion ¬es_vacia T obtener_frente(); //precondicion ¬es_vacia ~cola(); }; template <class T> cola<T>::cola(){ this->frente=NULL; this->final=NULL; this->cantidad=0; } template <class T> bool cola<T>::es_vacia(){ return this->frente==NULL; } template <class T> int cola<T>::longitud(){ return this->cantidad; } template <class T> void cola<T>::encolar(T e){ nodo<T> *nuevo; nuevo = new nodo<T>(); nuevo->set_elem(e); if(this->frente==NULL){ this->frente=nuevo; }else{ final->set_siguiente(nuevo); } this->final=nuevo; cantidad++; } template <class T> void cola<T>::desencolar(){ nodo<T> *aux; aux=frente; frente=frente->get_siguiente(); //aux->~nodo(); aux->set_siguiente(aux); cantidad--; } template <class T> T cola<T>::obtener_frente(){ return frente->get_elem(); } template <class T> cola<T>::~cola(){ while( !this->es_vacia() ){ this->desencolar(); } delete frente; delete final; } #endif