内存泄漏,来源:float**binsRowPtrs=新float*[nbins];

Memory Leak, source: float** binsRowPtrs = new float *[_nbins];

本文关键字:float nbins binsRowPtrs 来源 内存 泄漏      更新时间:2023-10-16

如何正确删除它?

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);
}

如何正确删除此[?]

正确吗?您使用RAII并让其他东西为您处理删除操作。根据你想做的事情,你可能想使用:

  • std::vector<std::vector<float>>:浮点数组的数组
  • std::vector<float*>:指向浮点的非拥有指针的数组(即,其他东西处理正确的分配和释放)
  • 或者可能只是std::vector<float>:一个浮点数组

规则是:

在完全相同的地址上,分别调用与您使用的newnew[]一样多的deletedelete[]

所以,如果你刚刚在binRowPtrs上调用了new,那么你只需要调用delete binRowPtrs

然而,在您没有向我们展示的代码部分中,如果您对每个数组元素使用通过new的动态分配,那么您需要遍历数组并对每个元素调用delete

请注意,理想情况下,
在C++中,只有当您无法避免动态分配时,才应该使用它们&
如果您必须使用原始指针,请始终使用RAII智能指针,以避免显式内存管理(您已经注意到在您的情况下这样做的危险)。

这将清除这些指针:

delete [] binsRowPtrs;

但是你存储在垃圾箱中的实际数据不会被触碰。