错误:解除分配二维阵列
Error: Deallocating a 2D array
我正在开发一个程序,其中一项任务是从文本文件中读取点(x,y 和 z),然后将它们存储在数组中。现在,文本文件可能包含 10^2 甚至 10^6 个点,具体取决于用户选择的文本文件。因此,我正在定义一个动态数组。
为了分配动态 2D 数组,我写了如下,它工作正常:
const int array_size = 100000;
float** array = new float* [array_size];
for(int i = 0; i < array_size; ++i){
ary[i] = new float[2]; // 0,1,2 being the columns for x,y,z co-ordinates
}
将点保存在数组中后,我编写以下内容来释放未分配的内存:
for (int i = 0; i < array_size; i++){
delete [] array[i];
}
delete [] array;
然后我的程序停止工作并显示"项目.exe停止工作"。
如果我不解除分配,程序运行良好。
在您的评论中,您说0,1,2 being the columns for x,y,z co-ordinates
,如果是这种情况,则需要分配为float[3]
。当你分配一个float[N]
数组时,你正在分配一个大小为N * sizeof(float)
的内存块,你将在数组中从1
到N - 1
索引它们。因此,如果你需要 indeces 0,1,2
,你需要分配一个大小为 3 * sizeof(float)
的内存,这使得它float[3]
。
因为除此之外,我可以编译和运行代码而不会出错。如果修复它但仍出现错误,则可能是编译器问题。然后尝试将100000
减少到较小的数字,然后重试。
你是说你正在尝试实现一个动态数组,这就是std::vector
所做的,我强烈建议你使用它。通过这种方式,您使用的是标准库中经过良好测试的内容,并且您不会通过本质上尝试推出自己的std::vector
版本而遇到问题。此外,这种方法更好地包装内存,因为它使用 RAII,利用该语言来解决许多内存管理问题。这还有其他好处,例如使您的代码更加异常安全。
此外,如果您要存储 x,y,z 坐标,请考虑使用结构体或元组,我认为这会大大提高可读性。您也可以键入定义坐标类型。像std::vector< coord_t >
这样的东西对我来说更具可读性。
(非常感谢建议!!
最后,我将向量用于所述问题,原因如下:
1.与数组(当然不是数组对象)不同,我不需要手动释放未分配的内存。
2.向量类下定义了大量内置方法
- 载体大小可以在后期阶段扩展
以下是我如何使用 2D 矢量来存储点(x,y,z 坐标)
初始化(分配内存)2D 向量:
vector<vector<float>> array (1000, vector<float> array (3));
其中 1000 是行数,3 是列数
声明后,值可以简单地传递为:
array[i][j] = some value;
此外,在后期阶段,我将采用向量参数并返回向量的函数声明为:
vector <vector <float>> function_name ( vector <vector <float>>);
vector <vector <float>> function_name ( vector <vector <float>> input_vector_name)
{
return output_vector_name_created_inside_function
}
注意:此方法在返回时将向量的副本装箱,使用指针通过引用返回。即使当我通过引用返回矢量时我的不起作用:(
对于多数组,我建议使用 boost::multi_array。例:
typedef boost::multi_array<double, 3> array_type;
array_type A(boost::extents[3][4][2]);
A[0][0][0] = 3.14;
- 二维阵列的动态分配
- C2440 使用Shared_ptr创建二维阵列
- 围绕二维阵列做一个圆圈
- 为什么一个二维阵列会导致赛段故障,而另一个则不会导致?
- 二维阵列的名称到底代表什么?
- 返回二维阵列
- 是二维阵列访问/修改时间组
- 如何创建一个具有空值、递减编号系统和.txt文件输入值的二维阵列网格
- 八个皇后二维阵列,带有gotos errror
- C++中的二维阵列
- 使用矢量创建二维阵列
- 编制二维阵列
- 错误:解除分配二维阵列
- 复制二维阵列C++
- 将二维阵列模拟为一维阵列
- 从具有两列的文件中加载二维阵列
- 可调整大小的动态二维阵列的更好解决方案
- 使用二维阵列用C++求解埃拉托色尼筛
- 如何显示非对角线二维阵列元素
- 嵌套阵列或嵌套二维阵列