在我的类中,我有一个动态分配的指针数组。我的声明:指针内存泄漏的C++数组
array = new Elem* [size];
for (int i = 0; i < size; i++) {
array[i] = NULL;
}
所以有一个指针数组,其中每个指针指向一个简单的Elem结构。
主要问题是,我应该如何正确释放数组。如果我只使用:
for (int i = 0; i < size; i++) {
delete array[i];
}
Valgrind的报告1未释放的块,其被追踪到线,其中“阵列=新ELEM * [大小];”状态。
在另一方面,如果我加入到以前的代码:
delete array;
而且我认为他是正确的,Valgrind的报告0未释放的块,这是完美的,但它报告
Mismatched free()/delete/delete []
恰好在'删除数组'的行上。是。我也尝试过'删除[]数组',但那也只是“1个未被释放的块”!如果有人能以正确的方式向我解释,我们将非常感激。
编辑: 因此,使用:
for (int i = 0; i < size; i++) {
delete array[i];
}
delete[] array;
工作可能罚款。它在我的一个班级工作(我有两个类似的),另一个班级还在报告一些小漏洞。我认为这只是一个小错误的地方,但仍然Valgrind的指向所在行
array = new Elem* [size];
看台。
EDIT2: 我解决了这个问题,谢谢您的辛苦贡献!
它说不释放块得到allocateD? –
让您的生活更轻松:删除所有上述内容,并使用Boost [ptr_vector](http://www.boost.org/doc/libs/1_47_0/libs/ptr_container/doc/ptr_vector.html)。 –
我知道这并不回答你的问题,但是有没有一些理由你不能使用std :: vector来大大简化内存管理? –
Void