【发布时间】:2014-01-14 19:04:57
【问题描述】:
我正在开发一个程序,其中一项任务是从文本文件中读取点(x、y 和 z),然后将它们存储在一个数组中。现在文本文件可能包含 10^2 甚至 10^6 点,具体取决于用户选择的文本文件。因此我定义了一个动态数组。
为了分配一个动态二维数组,我写了如下,它工作正常:
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;
然后我的程序停止工作并显示“Project.exe 停止工作”。
如果我不取消分配,程序就可以正常工作。
【问题讨论】:
-
您有什么令人信服的理由不使用
std::array或std::vector? -
同样,为什么不创建一个包含 3 个浮点数的
struct数组? -
你有一个错字
ary[i] = new float[2];ary => 数组 -
这里写的代码没问题,为什么不贴真实的呢?
-
@adrin 在正确的轨道上。如果您认为可以将 3 个值 (0,1,2) 分配给 2 的数组,那么您就是在破坏内存。这可能是导致您的
delete []失败的原因。我假设一次迭代总是成功的。
标签: c++ arrays memory-management