我有一个程序可以实现人们和他的公司的数据库。我创建了指向类成员的动态指针数组而不是类成员的动态数组,因为使用它可以更快地进行复制。
我有可用的版本,但 valgrind 在析构函数中显示不匹配删除(删除数据库)
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];
}
我用的也是添加
CCompany* newIt=new CCompany(oName,oAddr,cName,cAddr);
所以我尝试了以下我之前认为正确的代码
~CCompanyIndex ( void )
{
delete [] db;
}
但是所有通过 adding 方法分配的内存都不会被释放。
最佳答案
第一个样本几乎是正确的。您正在删除 for
循环中的每个元素,但随后您尝试删除
数组。
for(unsigned i=0;i<len;i++) { delete db[i]; }
delete db;
它应该是:
for(unsigned i=0;i<len;i++) { delete db[i]; }
delete[] db;
无论何时使用 new ...[]
,您都应该使用 delete[]
。
此外,不要忘记 Rule of Three (或 Five(或 Zero))。
关于c++ - 不匹配删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15511982/