【发布时间】:2015-05-10 06:02:02
【问题描述】:
我们刚刚收到了 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 实现确实无效吗?
【问题讨论】:
-
你把它弄得一团糟。每个
new[]应该有一个delete[]。 -
如果您的二维矩阵是
double类型,那么delete _arr[i][j];正在删除一个双精度,不是吗? -
std::vector<std::vector<double>> _arr;和: _arr(ysize, std::vector<double>(xsize))
标签: c++ arrays memory-management destructor