Ho un programma che implementa il database dei popoli e delle sue società. Ho creato una matrice dinamica di puntatore ai membri della classe invece che alla matrice dinamica dei membri della classe, perché la copia è più veloce con essa.Mancata corrispondenza Elimina
Ho versione che funziona ma valgrind mostra mancata corrispondenza cancellare in distruttore (cancellare db)
CCompany** db;
~CCompanyIndex (void)
{
for(unsigned i=0;i<len;i++)
{
/*cout<<"dealloc:"<<db[i]<<endl;*/
delete db[i];
}
delete db;
}
CCompanyIndex (void)
{
max=1000;
len=0;
db=new CCompany*[max];
}
Io uso anche di aggiungere
CCompany* newIt=new CCompany(oName,oAddr,cName,cAddr);
Così ho cercato seguente codice che ritengo corretto in precedenza
~CCompanyIndex (void)
{
delete [] db;
}
Ma poi tutta la memoria allocata aggiungendo metodo non è deallocata.
(1) Conoscete la [Regola del Tre] (http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three)? (2) Avete considerato puntatori e contenitori intelligenti invece di puntatori grezzi e memoria allocata dinamicamente? –