Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447

    [C++] Errore in esecuzione: "ciclo infinito"

    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?
    codice:
    #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;
    }

  2. #2
    Utente di HTML.it L'avatar di sotoli
    Registrato dal
    Mar 2008
    Messaggi
    150
    Guarda....l'ho compilato ed eseguito sul mio pc, funziona benissimo.

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

  3. #3
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    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.

  4. #4
    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:
    codice:
    $ 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.

  5. #5
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Ho provato su windows e va perfettamente. Il file di input che utilizzo è il seguente:
    codice:
    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.

  6. #6
    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?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.