Air*_*ezx 0 c++ arrays destructor memory-management
我们刚刚收到 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;
}
Run Code Online (Sandbox Code Playgroud)
分配内存的代码非常简单,我将粘贴它以使事情更清楚,但有问题的部分在上面的代码中。
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];
}
}
Run Code Online (Sandbox Code Playgroud)
他们正确地剥夺了积分吗?我的dtor实施确实无效吗?
是错误的,不应该存在; delete _arr[i][j]delete _arr[i];也是错误的 - 因为这是您分配的数组new [],所以您需要使用delete [] _arr[i];.
经验法则是:delete每个都有一个new;和delete[]每个new[].
此外,delete与 s 相比,复合材料的 s 将以相反的顺序执行new(您已经这样做了)。
这样我们就得到
~Matrix() {
for (int i = 0; i < _rows; i++) {
delete[] _arr[i];
}
delete[] _arr;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20579 次 |
| 最近记录: |