c++ - 这个重新分配是否正确?

标签 c++ memory-management

我有一个分配如下的 3x3 二维动态数组:

int** matrix = new int* [3];
matrix[0] = new int [3*3];
for (int i = 1; i < 3; ++i)
    matrix[i] = matrix[i-1] + 3;

我应该如何释放它?这是正确的吗:

delete [] matrix;

delete [] matrix[0];

或者我还应该删除 matrix[1], [2]

最佳答案

按照你的方式,你应该:

delete [] matrix[0];
delete [] matrix;

但这是一种非常非常规的分配动态二维数组的方式。通常,您分配一个指针数组,然后为每一行(列)分配一个实际类型的数组。

// allocate
int **matrix = new int*[3];
for(int i = 0; i &lt 3; ++i)
  matrix[i] = new int[3];

// deallocate
for(int i = 0; i &lt 3; ++i)
  delete [] matrix[i];

delete [] matrix;

关于c++ - 这个重新分配是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/983244/

相关文章:

c++ - 将 PORT 保存为静态常量成员

javascript - js中树对象实现的内存管理

iphone - glDrawElements 分配内存但不释放它

c++ - 使用长度和编码将 const char* 字符串转换为 NSString

java - 启动 Activity 内存泄漏

c - 重置 C 中的字符缓冲区

c++ - 帮助识别内存泄漏

c++ - 为什么 int i=400*400/400 给出结果 72,数据类型是循环的?

c++ - 如何防止 Valgrind 为每个新线程启动嵌入式 gdbservers?

C++20:多种类型的概念及其约束,正确的语法?