我有实现人民和他的公司数据库的程序。我创建了指向类成员的指针的动态数组,而不是类成员的动态数组,因为它的复制速度更快。
我有可以工作的版本,但 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;
}
但是,通过添加方法分配的所有内存都不会被释放。
原文由 user1890078 发布,翻译遵循 CC BY-SA 4.0 许可协议
第一个样本几乎是正确的。您正在删除
for
循环中的每个元素,但随后您尝试delete
数组。它应该是:
每当您使用
new ...[]
时,您应该使用delete[]
。另外,不要忘记 三(或 五(或 零))规则。