不匹配删除

use*_*078 8 c++ valgrind dynamic mismatch

我有程序,实现人民和他的公司的数据库.我已经创建了指向类成员的动态数组指针而不是类成员的动态数组,因此使用它可以更快地进行复制.

我有版本,但valgrind在析构函数中显示不匹配删除(删除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];
}
Run Code Online (Sandbox Code Playgroud)

我也用来添加

CCompany* newIt=new CCompany(oName,oAddr,cName,cAddr);
Run Code Online (Sandbox Code Playgroud)

所以我尝试了以下我认为正确的代码

~CCompanyIndex ( void )
{
    delete [] db;
}
Run Code Online (Sandbox Code Playgroud)

但是,通过添加方法分配的所有内存都不会被释放.

Jos*_*eld 16

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

for(unsigned i=0;i<len;i++) { delete db[i]; }
delete db;
Run Code Online (Sandbox Code Playgroud)

它应该是:

for(unsigned i=0;i<len;i++) { delete db[i]; }
delete[] db;
Run Code Online (Sandbox Code Playgroud)

无论何时使用new ...[],都应该使用delete[].

另外,不要忘记(或五)(或)的规则.


pad*_*ddy 9

你用错了delete。做这个:

CCompanyIndex::~CCompanyIndex()
{
    for(unsigned i=0; i<len;i++) delete db[i];
    delete [] db;
}
Run Code Online (Sandbox Code Playgroud)

请注意delete []通话。