首页 > 解决方案 > 此代码中的 delete[] 是否正确释放?

问题描述

考虑以下使用动态分配的二维数组的方式(由于某种原因,这里的回复中没有出现这种方式):

const int nRows = 2, nCols = 3;
int (*arr)[nCols] = (int(*)[nCols])(new int[nRows * nCols]);
arr[1][1] = 2;
std::cout << arr[1][1] << endl;
delete[] arr;

delete[]在这种情况下,最后一行是否正确释放内存?

标签: c++dynamic-memory-allocation

解决方案


这是未定义的行为;参数的类型delete必须与对应的结果具有相同的类型new

您可以使用以下方法改进代码:

int (*arr)[nCols] = new int[nRows][nCols];

(甚至auto *arr =......)在这种情况下,相同的删除表达式将是正确的。不得不使用演员表通常表明你走错了一步。


推荐阅读