Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - bad_alloc vector
Forum - C/C++ - bad_alloc vector

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
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:

http://img838.imageshack.us/i/catturazk.jpg/

Ultima modifica effettuata da il 17/12/2010 alle 11:11
PM
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Up
1
Down
V
Segnala al moderatore
Postato alle 11:46
Venerdì, 17/12/2010
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?

PM
Avatar
()
Newbie


Messaggi:
Iscritto:

Up
0
Down
V
Segnala al moderatore
Postato alle 12:01
Venerdì, 17/12/2010
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:

Codice sorgente - presumibilmente C#

  1. void functionAdd()
  2. {
  3.         WIN32_FIND_DATA FindFileData;
  4.        
  5.         HANDLE hFind = INVALID_HANDLE_VALUE;
  6.        
  7.         char DirSpec[MAX_PATH]; // directory specification
  8.  
  9.         do
  10.         {              
  11.                 cout << "Inserisci un Path valido:  ";
  12.                 cin >> DirSpec;
  13.                 strcat_s(DirSpec, "\\*");
  14.                 hFind = FindFirstFile(DirSpec, &FindFileData);
  15.         }while(hFind == INVALID_HANDLE_VALUE);
  16.                
  17.         do
  18.         {
  19.                 // If this filename is NOT a directory
  20.                 if( !(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
  21.                 {
  22.                         char dir2[MAX_PATH];
  23.                         for(int i = 0; i < MAX_PATH; i++)
  24.                         {
  25.                                 dir2[i] = DirSpec[i];
  26.                                 if(dir2[i] == '*')
  27.                                         dir2[i] = '\\';
  28.                         }
  29.                                        
  30.                         strcat_s(dir2, FindFileData.cFileName);
  31.                         ifstream is(dir2, ios::in);
  32.  
  33.                         if (!is.good())
  34.                                 cout << "Errore in apertura di: " << FindFileData.cFileName << endl; //controllo apertura file
  35.                                
  36.                         else
  37.                         {
  38.                                 tabs t = leggiFile(is, FindFileData);
  39.                                 if(t.getNel())
  40.                                   Files.push_back(t);
  41.                         }
  42.                         is.close();//chiudi il collegamento al file
  43.                 }//si sposta al file successivo all'interno della stessa directory
  44.         } while( FindNextFile(hFind, &FindFileData) );
  45.                   FindClose(hFind);//interrompe l'Handle al file...
  46. }
  47.  
  48. tabs leggiFile(istream & is, WIN32_FIND_DATA FindFileData)
  49. {
  50.         tabs tab;
  51.         tab.setNomeFile(FindFileData.cFileName);
  52.         string s;
  53.         int n = 0;//controlla se sono state inserite parole o meno...
  54.         while(getline(is, s, '\n'))
  55.         {//acquisisci fino alla fine della riga
  56.                 Tokenizer st(s);
  57.                 string token;
  58.                 while((token = st.next()) != "")tab.ins(token);
  59.                 s.clear();//svuota la stringa s
  60.         }
  61.        
  62.         AddEffect++;//segna quante add sono state effettuate
  63.         return tab;
  64. }



dove :
Files è di tipo Vector<TabellaHash<string>>

Ultima modifica effettuata da il 17/12/2010 alle 21:07
Questo non è il codice completo... posta il codice completo, altrimenti non ti si può aiutare. - pierotofy - 17/12/10 18:00
PM
Usa i commenti per chiedere spiegazioni o ringraziare le risposte.