I'm working with Lists in C ++ and while doing the following code to implement a list:
#include <iostream>
using namespace std;
class NO{
int idade;
string nome;
NO *no;
public:
void setDados(int, string);
int getidade();
string getnome();
void setNext(NO*);
NO* getNext();
~NO(){};
};
class Lista{
NO *inicio;
int quant_el;
public:
Lista(){
quant_el = 0;
inicio->setNext(NULL);
}
void inserir(int, string);
void pesquisar(NO);
void remover(int);
void listar();
};
void NO :: setDados(int idade, string nome)
{
this->idade = idade;
this->nome = nome;
}
int NO :: getidade()
{
return idade;
}
string NO :: getnome()
{
return nome;
}
void NO :: setNext(NO *no)
{
this->no = no;
}
NO* NO :: getNext()
{
return no;
}
void Lista :: inserir(int idade, string nome)
{
NO *aux;
aux = inicio;
NO *novo = new NO();
novo->setDados(idade, nome);
novo->setNext(NULL);
if(quant_el == 0)
{
inicio->setNext(novo);
quant_el++;
}
else
{
while( (aux->getNext()) != NULL )
{
aux = aux->getNext();
}
aux->setNext(novo);
quant_el++;
}
cout << "Foi inserido '" << idade << " " << nome << "'" << endl;
}
void Lista :: pesquisar(NO obj)
{
NO *aux;
int i;
int cont = 1;
int cont1 = 0;
aux = inicio;
if(quant_el == 0)
{
cout << "Não há nenhum dado na sua Lista." << endl;
}
else
{
for(i = 0; i < quant_el; i++)
{
cont++;
if(((aux->getNext())->getidade() == obj.getidade()) && ((aux->getNext()->getnome() == obj.getnome())))
{
cont1++;
break;
}
aux = aux->getNext();
}
if(cont1 == 0)
{
cout << "O dado não foi encontrado." << endl;
}
else
{
cout << "Dado encontrado na posição " << cont - 1 << endl;
}
}
}
void Lista :: remover(int pos)
{
int i;
NO *aux, *aux1;
aux = inicio;
aux1 = aux->getNext();
if(pos > quant_el)
{
if(quant_el == 0)
{
cout << "Sua lista está vazia, não há elementos para remover." << endl;
}
else
{
cout << "Posição inválida, sua lista possui menos elementos." << endl;
}
}
else
{
for(i = 0; i < pos - 1; i++)
{
aux = aux1;
aux1 = aux1->getNext();
}
aux->setNext(aux1->getNext());
quant_el --;
cout << "Dado " << i + 1 << " removido: " << endl << aux1->getidade() << " " << aux1->getnome() << endl << endl;
delete aux1;
}
}
void Lista :: listar()
{
int i;
NO *aux;
aux = inicio;
if(quant_el == 0)
{
cout << "Sua lista está vazia, não há elementos para mostrar." << endl;
}
else
{
for(i = 1; i <= quant_el; i++)
{
cout << i << " Dado:" << endl;
cout << aux->getNext()->getnome() << endl << aux->getNext()->getidade() << endl << endl;
aux = aux->getNext();
}
}
}
int main()
{
setlocale(LC_ALL, "");
Lista lista1;
NO loiola, rangel, humb;
loiola.setDados(18, "Loiola");
rangel.setDados(29, "Eustáquio");
humb.setDados(23, "Humberto");
lista1.inserir(18, "Filipe");
lista1.inserir(29, "Eustáquio");
lista1.inserir(10000, "Raul Seixas");
lista1.inserir(18, "Leticia");
lista1.inserir(18, "Mayra");
//lista1.inserir(23, "Humberto"); Se um nó a mais for inserido, o programa crasha
lista1.pesquisar(loiola);
lista1.pesquisar(rangel);
//lista1.pesquisar(loiola); Se um nó a mais for pesquisado, o programa crasha.
lista1.remover(2);
lista1.remover(3);
lista1.remover(1);
lista1.listar();
lista1.listar(
);
return 0;
}
You can also visit link
The program started crashing out of nowhere, searching more than 2 nodes or inserting more than 5. There are no compilation errors, the program simply crashes.
Would anyone know what the problem was?
Thanks in advance.