c++ - 如何在 C++ 中正确释放二维数组的内存?

标签 c++ memory-management

我是这样分配的:

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[] 总是new[] 配对。

delete 总是new配对。

所以是的,在您的情况下,您需要调用 delete[] matrix; 来释放 float* 指针数组。 不要使用free,除非该指针是通过调用malloc &c.获得的,这在C++中是不常见的。

不过,如果您想在数学意义上对矩阵建模,那么我建议您使用第三部分库。我使用 BLAS,它是 Boost 发行版的一部分。

关于c++ - 如何在 C++ 中正确释放二维数组的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47773195/

相关文章:

c++ - 使用ICU将UTF-8转换为UCS2导致乱码

c++ - 在 C++ 中循环定义多个输出文件

c - 函数外释放内存

google-analytics - 使用 Google Analytics 跟踪 CPU 和内存使用情况

c++ - 从c++中的 vector 生成随机数

c# - 托管 C++ 和 C# 中的等效代码(VB6 中的事件)

c++ - 为什么 C++ 中的 set::end 迭代器取消引用集合中的元素数量?

C# 内存分配和 Release模式

c++ - 我应该多认真对待 Valgrind 和小内存泄漏(比方说 < 100 字节)?

c++ - 让 shared_ptr 拥有现有指针的更简单方法