不匹配删除

新手上路,请多包涵

我有实现人民和他的公司数据库的程序。我创建了指向类成员的指针的动态数组,而不是类成员的动态数组,因为它的复制速度更快。

我有可以工作的版本,但 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 许可协议

阅读 516
1 个回答

第一个样本几乎是正确的。您正在删除 for 循环中的每个元素,但随后您尝试 delete 数组。

 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[]

另外,不要忘记 (或 (或 ))规则。

原文由 Joseph Mansfield 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题