PDA

Visualizza la versione completa : [C++] Errore in esecuzione: "ciclo infinito"


Pacio88
30-12-2008, 17:46
Ho questo programma che memorizza da un file dei nomi e li inserisce in una lista. Tuttavia dopo che l'inizializzazione è eseguita e pure la stampa, l'applicazione non termina. Bensì rimane in attesa, come se si aspettasse che dovessi inserire dei valori. Questo è il codice, qualche idea?

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

int const MAX_S = 50;

struct elem{
int inf;
char str[MAX_S];
elem* next;
};

typedef elem* lista;

class Ufficio{
lista testa;
int num;
public:
Ufficio(const char*);
void arriva(const char*);

friend ostream& operator<<(ostream&, const Ufficio&);
};

//Function
void insTesta(lista& li, const char* s, int n){
elem* p = new elem;
strcpy(p->str, s);
p->inf = n;
p->next = li;
li = p;
}

//Function Member
Ufficio::Ufficio(const char* s){
testa = NULL;
num = 1;
char str[MAX_S];
ifstream in(s);
if(!in)
{
cerr << "Errore apertura file";
exit(1);
}
while(in >> str)
arriva(str);
}

void Ufficio::arriva(const char* s){
elem* p;
elem* q;
for(q=testa; q!=NULL; q=q->next)
p = q;
q = new elem;
q->inf = num++;
strcpy(q->str, s);
q->next = NULL;
if(testa==NULL)
testa = q;
else
p->next = q;
}

ostream& operator<<(ostream& os, const Ufficio& uf){
os << "Cognome\t\t" << "Numero\n";
elem* p = uf.testa;
lista prov = NULL;
while(p!=NULL)
{
insTesta(prov, p->str, p->inf);
p=p->next;
}
p = prov;
while(p!=NULL)
{
os << p->str << "\t\t" << p->inf << endl;
p = p->next;
}
return os;
}

int main(){
Ufficio uf("registro.txt");
cout << uf;
return 0;
}

sotoli
30-12-2008, 18:26
Guarda....l'ho compilato ed eseguito sul mio pc, funziona benissimo. :bhò:

Prova a postare un'immagine della finestra del dos nel momento in cui entra e non esce più da quel ciclo.

Pacio88
30-12-2008, 20:20
Adesso che mi dici così provo a compilarlo su windows, perchè attualmente lo avevo compilato con xcode su mac. Forse allora è un problema di OS.

MacApp
30-12-2008, 20:32
Originariamente inviato da Pacio88
Adesso che mi dici così provo a compilarlo su windows, perchè attualmente lo avevo compilato con xcode su mac. Forse allora è un problema di OS.

Compilato e testato con successo su Mac OS X 10.4.11 (Tiger) e funge sia in modalità debug che release:


$ g++ -g -Wall -ansi -pedantic main.cpp
$ g++ -O4 -Wall -ansi -pedantic main.cpp
$ g++ --version
i686-apple-darwin8-g++-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5367)


Piuttosto "posta" il file di input che tu utilizzi.

Pacio88
30-12-2008, 23:36
Ho provato su windows e va perfettamente. Il file di input che utilizzo è il seguente:

Pinzi
Pucci
Neri
Bianchi
Tuttavia su mac continua a non fnzionare correttamente, mha che mistero. :master:
Se potesse tornare utile ho Leopard 10.5.6 e xcode 3.0.

MacApp
31-12-2008, 00:58
Ma in che senso ti si blocca con Xcode? Hai provato, quando si blocca, a mettere in pausa il programma ed in debug vedere dove sta fermo? Vedi qualche signal nell'output di debug di Xcode?

Hai provato a compilare da linea di comando come ho fatto io?

Considera che e' cosa moooolto rara che gcc sbagli.. insomma se ti si impalla con Xcode (che sotto usa gcc), e' molto probabile che il problema sia nel tuo programma, non in Xcode.

Non è che magari ti sembra che ti si impalli mentre in realtà e' in breakpoint a causa del memory leak generato? (ciò che allochi con new... non lo liberi) ecc.. ecc..

EDIT: sicuro che il file di input sotto Mac sia in formato testo puro?

Loading