[英]How to properly deallocate memory for a 2d array in C++?
这是我的分配方式:
float** matrix = new float*[size];
for (int i = 0; i < size; i++) {
matrix[i] = new float[size];
}
这是我解除分配的方式:
if (matrix != nullptr) {
for (int i = 0; i < size; i++) {
delete[] matrix[i];
}
}
free(matrix);
这是正确的还是我也应该delete[]
外部数组?
delete[]
总是与new[]
配对。
delete
总是与new
配对。
所以是的,在您的情况下,您需要调用delete[] matrix;
释放float*
指针数组。 除非已经通过调用malloc
&c。获得了该指针,否则不要使用free
,这在C ++中是不常见的。
虽然,如果您想在数学意义上对矩阵建模,那么我建议您使用第3部分库。 我使用BLAS,它是Boost发行版的一部分。
如何在C ++中为2D数组正确地释放内存?
不手动。 使用RAD或std::array
类的抽象,如std::vector
,如果您知道编译时矩阵的大小,则可以使用std::array
。
{
std::vector<std::vector<float>> matrix(size);
for(auto& v : matrix) v.resize(size);
}
// memory automatically freed at the end of the scope
在Modern C ++中, 几乎永远不要使用new
和delete
。 有关更多信息,请参见我的答案: Malloc与原始函数的新增功能
如果要编写需要高性能矩阵实现的程序,请不要创建自己的程序。 您的代码和我的使用std::vector
示例都具有对缓存不友好的锯齿状布局,这会严重损害性能。 考虑使用高质量的生产就绪库,例如Eigen,Blaze或BLAS。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.