用c ++删除内存

时间:2015-11-29 17:09:22

标签: c++ arrays memory

我正在尝试使用动态内存分配重写我的代码,我正在使用this question(和答案)来帮助我。所以按照Johanes Shaub的建议,我已经将我的二维数组声明为:

double (*q_1_matrix)[TIME] = new double[SPACE][TIME];

当我运行我的代码时,一切似乎都运行正常。但是,当我添加以下行以再次释放内存时:

for(i = 0; i < SPACE; ++i) {
    delete [] q_1_matrix[i];
}
delete [] q_1_matrix;

然后我收到警告: 删除数组'*(q_1_matrix +((sizetype)(((long unsigned int)i)* 800ul)))'[默认启用] delete [] q_1_matrix [i]; 然后我得到一个Segmentation故障(核心转储)。

有人知道我做错了吗?

2 个答案:

答案 0 :(得分:3)

new调用实际上创建了一大块内存。它仅被索引为二维数组。 你可以调用delete[] q_1_matrix;(没有for循环)。

答案 1 :(得分:3)

您提到的问题会限制使用new的答案,但您几乎肯定不需要new

使用标准库更简单;然后,你所有的担忧都消失了:

std::vector<std::vector<double>> myvec(SPACE, std::vector<double>(TIME));

如果您将std::vector<double>(SPACE*TIME)包裹在模拟2D索引的类中,那就更好了。

无论如何,如果你真的必须自己管理内存,请记住你在这里创建一个大块动态内存(具有double[SPACE][TIME]的类型和尺寸),所以你必须只释放一次:

delete[] q_1_matrix;