PDA

Visualizza la versione completa : [C++] Segmentation Fault


Pacio88
06-12-2008, 11:39
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:


#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 (http://forum.html.it/forum/showthread.php?s=&postid=12120344#post12120344), 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

oregon
06-12-2008, 11:42
Riporto parte della mia risposta ...

Hai due problemi ... uno nella PushFund in cui, penso che manchi la parte in rosso



codice:...
p->inf=value;
p->pun=NULL;
...


e uno nella popHead, ma non ho approfondito ...

Per la guida al debugger, non so cosa consigliarti perche' dipende esclusivamente dall'IDE che utilizzi ...

Pacio88
06-12-2008, 11:49
Diciamo che uso dev-c++ quando sono su windows..
Mentre quando sono sul mac utilizzo il terminale per compilare..

oregon
06-12-2008, 11:57
Devc++ non te lo consiglio ... con Windows meglio Visual C++ Express Edition e il suo debug ...

Per Mac ... non ti so dire.

XWolverineX
06-12-2008, 12:34
Io sono veramente stufo di tutti questi professori universitari che prendono e fanno usare DEV-Cpp come IDE. C'è Visual Studio Express che è gratis e migliore.

oregon
06-12-2008, 12:34
Originariamente inviato da XWolverineX
Io sono veramente stufo di tutti questi professori universitari che prendono e fanno usare DEV-Cpp come IDE ...

Concordo ...

Pacio88
06-12-2008, 12:40
Io dell'università italiana oltre al dev-c++ sono stufo di altre cose..

P.S. Davvero Visual Studio Express è gratuito?

oregon
06-12-2008, 12:42
Sì ... il Visual C++ 2008 EE lo trovi a partire da

http://www.microsoft.com/express/download/#webInstall

Pacio88
06-12-2008, 12:45
Qual'è allora la differenza con quello a pagamento?
Immagino per uno alle prime armi come me vada perfettamente bene, no?

oregon
06-12-2008, 13:04
Originariamente inviato da Pacio88
Qual'è allora la differenza con quello a pagamento?
Immagino per uno alle prime armi come me vada perfettamente bene, no?

Va benissimo ...

Loading