C++ 不匹配删除

C++ 不匹配删除,c++,dynamic,valgrind,mismatch,C++,Dynamic,Valgrind,Mismatch,我有一个程序,它实现了人民和他的公司的数据库。我创建了指向类成员的指针的动态数组,而不是类成员的动态数组,因为使用它可以更快地进行复制 我有一个可以工作的版本,但是valgrind在析构函数中显示不匹配的delete(delete db) 所以我已经尝试过我认为正确的代码 ~CCompanyIndex ( void ) { delete [] db; } 但是,通过adding方法分配的所有内存都不会被释放。第一个示例几乎是正确的。您正在删除for循环中的每个元素,但随后尝试删除该数组

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

我有一个可以工作的版本,但是valgrind在析构函数中显示不匹配的delete(delete db)

<>所以我已经尝试过我认为正确的代码

~CCompanyIndex ( void )
{
    delete [] db;
}

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

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

for(unsigned i=0;i<len;i++) { delete db[i]; }
delete db;

for(unsigned i=0;i每个元素都需要
delete db[i]
,但数组本身需要
delete[]db
,因此析构函数都不正确


分配了
new Foo[n]
的数组必须使用数组形式
delete[]
,这就是
valgrind
关于不匹配的new/delete的意思。您使用了错误的
delete
。请执行以下操作:

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

对于(unsigned i=0;i(1)您熟悉吗?(2)您是否考虑过智能指针和容器,而不是原始指针和动态分配的内存?更好的是,不要使用
new[]
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;
CCompanyIndex::~CCompanyIndex()
{
    for(unsigned i=0; i<len;i++) delete db[i];
    delete [] db;
}