Ho un codice in cui mi sto esercitando nella gestione di liste.
Tuttavia dopo che compilo senza nessun errore quando lancio il programma, costituito di una semplice main solo per testare le funzioni attualmente scritte, emerge un errore segmentatio fault. Quasi sicuramente l'errore è al livello dell'ultima funzione scritta, ovvero la popFund(), poichè prima non avevo avuto acora nessun errore.
Questo è il codice:
codice:
#include <iostream>
using namespace std;
struct elem{
int inf;
elem* pun;
};
class list{
elem* p0;
public:
list();
//~list();
void initValueList(int, int);
void printList();
void pushHead(int);
bool popHead();
void pushFund(int);
bool popFund();
int findData(int);
int listSize();
list orderList();
list operator+ (list);
list operator[] (list);
};
list::list(){
p0=NULL;
}
void list::initValueList(int num=0, int value=0){
p0=NULL;
elem* p=p0;
for(int i=0; i<num; i++){
p=new elem;
p->inf=value;
p->pun=p0;
p0=p;
}
}
void list::printList(){
elem* p=p0;
if(p==NULL)
cout << "Empty List\n";
else{
while(p!=NULL){
cout << "'" << p->inf << "'->";
p=p->pun;
}
cout << "NULL\n";
}
}
void list::pushHead(int value){
elem* p=new elem;
p->inf=value;
p->pun=p0;
p0=p;
}
bool list::popHead(){
elem* p;
if(p0==NULL)
return false;
p=p0->pun;
p0=p;
delete p;
return true;
}
void list::pushFund(int value){
elem* p;
elem* q;
for(p=p0; p!=NULL; p=p->pun)
q=p;
p=new elem;
p->inf=value;
if(p0==NULL)
p0=p;
else
q->pun=p;
}
bool list::popFund(){
elem* p;
elem* q;
if(p0==NULL)
return false;
for(q=p0; q->pun!=NULL; q=q->pun)
p=q;
if(q==p0)
p0=NULL;
else
p->pun=NULL;
delete q;
return true;
}
int main(){
list l1;
l1.initValueList(3, 3);
l1.printList();
l1.pushHead(5);
l1.printList();
l1.pushFund(5);
l1.printList();
l1.popHead();
l1.printList();
l1.popFund();
l1.printList();
return 0;
}
Sbagliando avevo continuato la discussione qui, pertanto chiedo scusa per la violazione del forum e ne approfitto per chiedere a Oregon che gentilmente mi aveva risposto se potesse indicarmi una guida sia cartacea che online per imparare a utilizzare un debugger.
Grazie