I have program which implements database of peoples and his companies. I have created dynamic array of pointer to class members instead of dynamic array of class members, cause copying is quicker with it.
I have version which works but valgrind shows mismatch delete in destructor (delete 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];
}
I use also to add
CCompany* newIt=new CCompany(oName,oAddr,cName,cAddr);
So I have tried following code which I consider correct previously
~CCompanyIndex ( void )
{
delete [] db;
}
But then all memory allocated by adding method is not deallocated.
You are using the wrong delete
. Do this:
CCompanyIndex::~CCompanyIndex()
{
for(unsigned i=0; i<len;i++) delete db[i];
delete [] db;
}
Note the delete []
call.
The first sample is almost correct. You're deleting each element in a for
loop, but then you attempt to delete
the array.
for(unsigned i=0;i<len;i++) { delete db[i]; }
delete db;
It should instead be:
for(unsigned i=0;i<len;i++) { delete db[i]; }
delete[] db;
Whenever you use new ...[]
, you should be using delete[]
.
Also, don't forget the Rule of Three (or Five (or Zero)).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With