内存泄漏,来源:float**binsRowPtrs=新float*[nbins];
Memory Leak, source: float** binsRowPtrs = new float *[_nbins];
如何正确删除它?
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>
:一个浮点数组
规则是:
在完全相同的地址上,分别调用与您使用的new
或new[]
一样多的delete
或delete[]
所以,如果你刚刚在binRowPtrs
上调用了new
,那么你只需要调用delete binRowPtrs
。
然而,在您没有向我们展示的代码部分中,如果您对每个数组元素使用通过new
的动态分配,那么您需要遍历数组并对每个元素调用delete
。
请注意,理想情况下,
在C++中,只有当您无法避免动态分配时,才应该使用它们&
如果您必须使用原始指针,请始终使用RAII到智能指针,以避免显式内存管理(您已经注意到在您的情况下这样做的危险)。
这将清除这些指针:
delete [] binsRowPtrs;
但是你存储在垃圾箱中的实际数据不会被触碰。
相关文章:
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 没有从阵列<float>到阵列<int>的可行转换
- 数组下标的类型"float*[float]"无效
- 没有合适的构造函数可以从"float"转换为"_D3DCOLORVALUE"
- 为什么我会收到此错误?无法将 {lb, ub} 从<大括号括起来的初始值设定项列表>转换为 float(**)(float*, int)
- 将 **float array 从 C++ Dll 传递给 python
- 错误:二进制'operator*' 'float'和'float[0]'类型的操作数无效
- float* 已在 Gameobject.obj 中定义
- 如何将 qml 的文本转换为 float 和 int
- 为什么将 1 添加到 numeric_limits<float>::min() 返回 1?
- 有没有比static_cast更优雅的从int到float的演员阵容<float>?
- 编译器给出错误:format 指定类型 'float *',但参数的类型'double' [-Wformat]
- OPENCL 警告:不兼容的指针类型将'float __global[16]'传递给类型为 '__global float4 的参数 *
- 错误:无法将"float*"转换为"float"
- 如何在函数中将字符串和分数存储为(Int 或 float)
- 缩小从double到float的转换
- 着色器将uint8投射到float,并将其重新解释回uint
- 我一直收到错误"cannot convert 'float*' to 'float' in return"
- 谷歌测试编译错误 Os X:函数式转换从"int"到"internal::FloatingEq2Matcher"的模糊转换<float>
- 内存泄漏,来源:float**binsRowPtrs=新float*[nbins];