URGENTE!! una classe grafo che swappa all’infinito

di il
2 risposte

URGENTE!! una classe grafo che swappa all’infinito

#ifndef GRAFO_H
#define GRAFO_H
class Grafo
{ // realizza il tipo astratto Grafo con nodi da 0 a N-1
// rappresentazione con matrice delle adicenze
public:
Grafo(int N)
{
num_nodi = N; arco = new bool*[num_nodi];


for (int i = 0; i < num_nodi; i++)


arco = new bool[num_nodi];

for (i = 0; i < num_nodi; i++)

for (int j = 0; j < num_nodi; j++)
arco[j] = false;

}

~Grafo() { for (int i = 0; i < num_nodi; i++) delete [] arco;
delete [] arco;
}
int NumNodi() { return num_nodi; }
bool EsisteArco(int i, int j) { return arco[j]; }
void MettiArco(int i, int j) { arco[j] = true; }
void TogliArco(int i, int j) { arco[j] = false; }

protected:
Grafo(const Grafo&); // copia e assegnazione
Grafo& operator=(const Grafo&); // proibite all'utente
bool** arco;
int num_nodi;
};
#endif

Passando 100000 al costruttore Grafo(100000) l' exe swappa all'infinito sull'hard disk
Mentre con file piccoli funziona

2 Risposte

  • Re: URGENTE!! una classe grafo che swappa all’infinito

    Dunque, osservando il tuo sorgente noto che allochi sull'heap N (N è l'argomento che passi al costruttore della classe Grafo) puntatori a bool, quindi, per ognuno dei puntatori a bool, N bool. che alla fine inizializzi a false. Alla fine hai allocato, insomma, N*N bool (oltre a N puntatori a bool). Se N vale 100000 e la sizeof(bool) è uno, hai comunque allocato per i tuoi boolean 100000000 (centomilioni) di bytes sullo heap. Non ho fatto una prova, ma non mi sembra strano che il sistema swappi non poco, non ti pare?

    Saluti.

    Marco
  • Re: URGENTE!! una classe grafo che swappa all’infinito

    Ooops! Piccolo errore: 100000 * 100000 non fa cento milioni, ma 10 miliardi (mi ero perso un 100)!
    Insomma, allocando 10 Gigabyte non è per niente strano tutto quello swappare.

    Marco
Devi accedere o registrarti per scrivere nel forum
2 risposte