在2D数组中释放内存
Deallocating memory in a 2D array
假设:
int** myArray = new int*[100];
for(int i = 0; i < 100; i++){
myArray[i] = new int[3];
}
释放这个数组的合适方法是什么(下面的方法,如果其中一种方法是正确的)?
1。
delete[] myArray;
2。
for(int i = 0; i < 100; i++){
for(int j = 0; j < 3; j++){
delete myArray[i][j];
}
}
delete[] myArray;
直觉上,我们似乎应该做类似2的事情。因为我们希望我们分配的所有内存都被删除,但我不确定。
您使用一个循环来创建它,您应该使用一个循环来删除它。顺序与分配顺序相反:
for(int i = 0; i < 100; i++)
delete [] myArray[i]; // delete all "rows" in every "column"
delete [] myArray; // delete all "columns"
此外:用于删除一维动态分配数组-用于删除上面的"行"answers"列"。
仅类似于删除2D指针数组的方式,例如:
int*** myArray = new int**[100]; // (1) for(int i = 0; i < 100; i++) { myArray[i] = new int*[3]; // (2) for(int j = 0; j < 3; j++) myArray[i][j] = new int(); // (3) } for(int i = 0; i < 100; i++) { for(int j = 0; j < 3; j++) delete myArray[i][j]; // (3) delete [] myArray[i]; // (2) } delete [] myArray; // (1)
你可以看到它的"反向"性质
正确的方法是
for(int i = 0; i < 100; i++)
delete [] myArray[i];
delete [] myArray;
相关文章:
- 如何在c++中释放内存
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- std::unordered_map析构函数不释放内存?
- 在C++中释放内存期间,迭代器与指针有何不同
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 释放内存(主题模板)时出现问题
- 使用后自动释放内存
- C++ 如何释放内存
- 从函数内对象的向量中释放内存
- C++ 在不释放内存的情况下调用析构函数
- 多个线程之间的获取-释放内存顺序
- C++ - 析构函数只是释放内存还是实际删除对象
- 使用 RAII 替换最终块以释放内存
- 如何通过带有指向基类的指针的删除运算符释放内存
- 代码中的"sprintf"用法是否需要释放内存?
- C++何时使用 delete[] 并正确释放内存?
- 为什么此获取和释放内存围栏不能给出一致的值?
- 抛出新表达式的参数子表达式时释放内存
- 在这种情况下,如何释放内存?
- 在 c++ 中应按什么顺序释放内存?