二维数组分配中的内存管理
Memory management in allocating 2-D array
我已经使用以下代码分配了一个二维数组:
// Dynamic allocation
int **matrix=new int*[n];
for(int i=0;i<n;i++)
{
matrix[i]=new int[n];
}
这很好用。
- 首先,我们分配一个整数指针数组
- 然后,我们进一步将前面的每个指针分配到
n
整数的内存位置。这创建了我们的二维数组
我知道动态分配数组的析构函数应该是这样的:
~SquareMatrix()
{
delete [] OneDarray;
}
重点放在[]
上,因为如果不写入,只会删除数组的第一个元素。
基于类似的理由,我想我需要放置[]
两次,以便删除整个二维数组,比如
delete [] [] matrix;
但这不起作用,并导致编译时出错。
正确的做法是什么
for(int i=0;i<n;i++)
{
delete [] matrix[i];
}
delete [] matrix
您需要删除每个内部数组,然后删除该数组。
正如评论中所建议的那样。更安全的方法是使用标准容器,如std::vector
。你可以这样做:
std::vector<std::vector<int>> matrix;
这将为您提供一个二维数组,但您不必处理清理。
"正确的方法是什么?"
使用标准容器,例如std::vector<std::vector<int>>
或std::array<std::array<int,N>,N>
(假定N
在编译时已经已知)是正确的方式
您没有在第一位使用new()
/new[]
和delete
/delete[]
(除了罕见的有效用例)。
如果你确定你有这样的情况,你可以按照与使用new[]
分配完全相反的顺序删除。正如编译器已经告诉您的那样,delete [][];
不是有效的语法。
相关文章:
- 当vector是tje全局变量时,c++中vector的内存管理
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- C++将字符串传递给 C 库以进行内存管理
- 从函数返回时C++内存管理
- 函数指针和 lambda 的内存管理
- 自定义内存管理器在发布模式下工作正常,但在调试模式下则不然
- C++中的内存管理
- C和C++中的内存管理有什么区别
- 字符 * 未从重载运算符或内存管理问题正确返回
- 如何在源代码中使用执行策略检测 C++17 的扩展内存管理算法的可用性?
- 底层指针和内存管理
- 智能指针,避免使用QNetworkAccessManager时进行手动内存管理
- c++中的内存管理问题
- 使用矢量时的内存管理
- 循环和内存管理中的指针算术C++?
- C++堆栈内存管理问题
- C 内存管理中的课程如何管理 - 研究
- 不可变数据模型的内存管理
- C++ 使用数组初始化时的 STL 向量内存管理
- SFML 纹理内存管理