C++中如何删除动态创建的二维矩阵?附创建实现代码
如何删除你动态创建的连续内存矩阵
没问题,我来帮你搞定这个问题~先看一眼你创建矩阵的代码,你是用了连续内存块的方式实现二维矩阵,这种方式比每行单独分配内存更高效,删除的时候也得对应着来,可不能瞎操作哦!
你的创建逻辑回顾
你先分配了一个存储行指针的数组:new float * [Nrows],接着分配了一块连续的Nrows*Ncols大小的float内存,最后把每个行指针指向这块连续内存的对应偏移位置——说白了,所有行其实共享同一块数据内存。
正确的删除步骤
因为所有行的数据都存在result[0]指向的那块连续内存里,所以删除只需要两步:
- 先释放那块连续的矩阵数据内存:
delete[] result[0]; - 再释放存储行指针的数组:
delete[] result;
完整的删除函数示例
可以写个对应的删除函数,方便你调用:
void deleteMatrix(float **matrix) { if (matrix != nullptr) { // 释放连续的矩阵数据内存 delete[] matrix[0]; // 释放行指针数组 delete[] matrix; } }
要避开的坑
千万别循环去delete每一行!比如下面这种错误写法绝对不能用:
// 错误示例!会导致重复释放内存,触发未定义行为 for (int i = 0; i < Nrows; i++) { delete[] matrix[i]; } delete[] matrix;
因为除了matrix[0],其他matrix[i]都是指向同一块内存的指针,重复delete同一块内存是C++里的大忌,轻则程序崩溃,重则出现各种奇怪的未定义问题。
内容的提问来源于stack exchange,提问作者qp212223
相关产品推荐
相关产品推荐

