删除3d动态数组c++
Deleting 3d dynamic array C++
我用下面的代码创建了一个3d动态数组
//layer = 2
//levelSize.x = 100
//levelSize.y = 100
level_array = new int**[layer];
for(int i = 0; i < layer; ++i)
{
level_array[i] = new int*[(int)levelSize.x];
for(int j = 0; j < levelSize.x; ++j)
level_array[i][j] = new int[(int)levelSize.y];
}
但是当我想删除它时,程序崩溃了
for(int i = 0; i != levelSize.x; ++i)
{
for(int j = 0; j != levelSize.y; ++j)
{
delete[] level_array[i][j];
}
delete[] level_array[i];
}
delete[] level_array;
我不知道删除数组的代码哪里出错了。
请帮我检查一下代码,谢谢
您为维度为[layer][levelSize.x][levelSize.y]
的数组分配内存,但在删除时,您将像使用维度为[levelSize.x][levelSize.y][somenting]
的数组一样使用它。
for(int i = 0; i != layer; ++i)
// ^^^^^ not levelSize.x
{
for(int j = 0; j != levelSize.x; ++j)
// ^^^^^^^^^^^ not levelSize.y
{
delete[] level_array[i][j];
}
delete[] level_array[i];
}
delete[] level_array;
将此命令添加到末尾,否则指针将位于堆栈顶部
level_array = nullptr;
区分删除单个dim数组和在堆上分配的多个dim数组是非常重要的:
#include <iostream>
using std::cout;
using std::endl;
int main()
{
int*** ptrInt = new int**[3];
for(int i(0); i < 3; i++)
ptrInt[i] = new int*[3];
for(int i = 0; i < 3; i++)
{
for(int j(0); j < 3; j++)
ptrInt[i][j] = new int[3];
}
for(int i = 0; i < 3; i++)
{
for(int j(0); j < 3; j++)
for(int k(0); k < 3; k++)
ptrInt[i][j][k] = k;
}
for(int i = 0; i < 3; i++)
{
for(int j(0); j < 3; j++)
for(int k(0); k < 3; k++)
cout << "ptrInt[" << i << "][" << j << "][" << k << "]: " << ptrInt[i][j][k] << endl;
}
// now freeing memory:
for(int i = 0; i < 3; i++)
{
for(int j(0); j < 3; j++)
delete[] ptrInt[i][j];
delete[] ptrInt[i];
}
delete[] ptrInt;
cout << endl << endl << endl;
return 0;
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '