c++ - 此代码中的 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[]
在这种情况下,最后一行是否正确释放内存?
解决方案
这是未定义的行为;参数的类型delete
必须与对应的结果具有相同的类型new
。
您可以使用以下方法改进代码:
int (*arr)[nCols] = new int[nRows][nCols];
(甚至auto *arr =
......)在这种情况下,相同的删除表达式将是正确的。不得不使用演员表通常表明你走错了一步。
推荐阅读
- glfw - 为什么我得到:“未定义的对 `glfwInit' 的引用”?
- c# - 如何在 mvc 中为本地 c: 驱动器创建动态 TreeView?
- ruby-on-rails - 如何在 Ruby on Rails ActiveAdmin 的新选项卡中打开 CSV、PDF 下载链接?
- java - 使用 RequestContextExecutor 的租户感知后台任务?
- python - SQLAlchemy Where 列列表中的值
- sql - Talend Create Select 性能调优
- couchdb - Cloudant 视图仍然包括 DOC 之外不需要的 id 键
- python - 语法错误:如果 res instanceof AsynchronousException:
- matlab - 如何减去与矩阵条件匹配的矩阵中的值?
- version - .Stat Suite 是否支持 SDMX 版本 2.1