我们刚刚收到了 C++ 期末考试的结果。其中一个问题是编写 double
的二维矩阵的简单表示。
我在析构函数实现中推断出一些要点,注释为 invalid implementation
并且没有进一步的信息。你能告诉我我哪里出错了吗(如果我确实出错了)。
这是我写的代码:
~Matrix() {
for (int i=0; i<_rows; i++) {
for (int j=0; j<_cols; j++) {
delete _arr[i][j];
}
delete _arr[i];
}
delete [] _arr;
}
分配内存的代码非常简单,我将其粘贴以使事情更清楚,但有问题的部分在上面的代码中。
Matrix(int rows, int cols) :
_arr(new double*[rows]), _rows(rows), _cols(cols)
{
for (int i=0; i<_rows; i++) {
_arr[i] = new double[_cols];
}
}
他们是否合理地扣分?我的 dtor
实现确实无效吗?
最佳答案
是错误的,不应该存在; delete _arr[i][j]
delete _arr[i];
也是错误的 - 因为这是一个用 new []
分配的数组,所以你需要使用 delete [] _arr[i ];
。
经验法则是:对每个new
进行一次delete
;以及每个 new[]
的 delete[]
。
与 new
(您已经执行过)相比,复合的 delete
将以相反的顺序执行。
因此我们得到
~Matrix() {
for (int i = 0; i < _rows; i++) {
delete[] _arr[i];
}
delete[] _arr;
}
关于c++ - 如何正确释放二维数组 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28935944/