Oppure

Loading
17/12/10 10:11
ragazzi ho il seguente problema:

in una data funzione ho come argomento passato per riferimento un oggetto di questo tipo:

vector<tabellaHash<string>>

dal momento che chiamo la funzione il vector è vuoto, il mio obiettivo è riempirlo con delle tabelle hash nella function...

grosso modo faccio cosi:

tabellaHash<string> tab;

//varie operazioni....

vettore.push_back(tab);

ed esco dalla funzione...se la tabella hash è una sola funziona per bene se ci sono più di una tabellahash allora in modalità debug su visual c++ ho questo messaggio di errore:

img838.imageshack.us/i/catturazk.jpg/
Ultima modifica effettuata da 17/12/10 10:11
17/12/10 10:46
lorenzo
Mah...dovrei vedere il codice intero per poterti dire qualcosa di più.

Comunque, "quando" hai l'errore? Quando tenti un secondo inserimento? Quando riutilizzi il vettore?
aaa
17/12/10 11:01
l'errore si verifica nel momento in cui esco dalla funzione di inserimento nel vettore ed effettuo dei controlli sullo stesso, errore che come ho scritto sopra si verifica solo se le tabelle hash sono più di una....
il pezzo di codice della funzione in cui avviene il push_back è questo:

void functionAdd()
{
	WIN32_FIND_DATA FindFileData;
	
	HANDLE hFind = INVALID_HANDLE_VALUE;
	
	char DirSpec[MAX_PATH]; // directory specification

	do
	{		
		cout << "Inserisci un Path valido:  ";
		cin >> DirSpec;
		strcat_s(DirSpec, "\*");
		hFind = FindFirstFile(DirSpec, &FindFileData);
	}while(hFind == INVALID_HANDLE_VALUE);
		
	do
	{
		// If this filename is NOT a directory
		if( !(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
		{
			char dir2[MAX_PATH];
			for(int i = 0; i < MAX_PATH; i++)
			{
				dir2[i] = DirSpec[i];
				if(dir2[i] == '*')
					dir2[i] = '\';
			}
					
			strcat_s(dir2, FindFileData.cFileName);
			ifstream is(dir2, ios::in);

			if (!is.good()) 
				cout << "Errore in apertura di: " << FindFileData.cFileName << endl; //controllo apertura file
				
			else
			{
				tabs t = leggiFile(is, FindFileData);
				if(t.getNel())
				  Files.push_back(t);
			}
			is.close();//chiudi il collegamento al file
		}//si sposta al file successivo all'interno della stessa directory
	} while( FindNextFile(hFind, &FindFileData) );
		  FindClose(hFind);//interrompe l'Handle al file...
}

tabs leggiFile(istream & is, WIN32_FIND_DATA FindFileData)
{
	tabs tab;
	tab.setNomeFile(FindFileData.cFileName);
	string s;
	int n = 0;//controlla se sono state inserite parole o meno...
	while(getline(is, s, '\n'))
	{//acquisisci fino alla fine della riga
		Tokenizer st(s);
		string token;
		while((token = st.next()) != "")tab.ins(token);
		s.clear();//svuota la stringa s
	}
	
	AddEffect++;//segna quante add sono state effettuate
	return tab;
}


dove :
Files è di tipo Vector<TabellaHash<string>>
Ultima modifica effettuata da 17/12/10 20:07