如何正确删除?
float** binsRowPtrs = new float *[_nbins];
这些项目不是使用new创建的动态。
float** binsRowPtrs = new float *[_nbins];
for (int i = 0; i < _nbins ;i++)
{
binsRowPtrs[i] = (float*) (bins[i].row(y).data);
}
答案 0 :(得分:2)
如何正确删除[?]
正确?您使用RAII并让其他东西为您处理删除。根据您要执行的操作,您可能需要使用:
std::vector<std::vector<float>>
:一系列花车阵列; std::vector<float*>
:一系列浮动的非拥有指针(即其他东西处理正确的分配和释放); std::vector<float>
:一系列花车。答案 1 :(得分:1)
规则是:
分别与您使用的delete
或delete[]
以及完全相同的地址分别拨打new
或new[]
。
因此,如果您刚刚new
拨打binRowPtrs
,则只需拨打delete binRowPtrs
即可。
但是,在您没有向我们展示的代码部分中,如果您通过new
为每个数组元素使用动态分配,那么您需要遍历数组并调用{{ 1}}也可以在每个元素上。
注意理想情况下,
在C ++中,只有在无法避免动态分配时才应使用动态分配
如果你必须这样做,永远不要使用原始指针,请始终使用 RAII 通过 smart pointers 来避免显式内存管理(你已经注意到了危险)在你的情况下这样做。)
答案 2 :(得分:0)
这将清除这些指示:
delete [] binsRowPtrs;
但是不会触及您使用垃圾箱存储的实际数据。