我有一个包含二维数组作为私有变量的类。问题是即使内存在析构函数中被取消分配,也会发生内存泄漏。 这是构造函数(“行”和“列”是全局变量)
Solution() {
loads = new double* [rows];
for (int i = 0; i < rows; i++)
loads[i] = new double[cols];
}
Solution(double**& lds) {
loads = new double*[rows];
for (int i = 0; i < rows; i++) {
loads[i] = new double[cols];
for (int j = 0; j < cols; j++)
loads[i][j] = lds[i][j];
}
}
复制构造函数:
Solution(const Solution& rhs)
{
loads= new double* [rows];
for (int i = 0; i < rows; i++) {
loads[i] = new double[cols];
for (int j = 0; j < cols; j++) {
loads[i][j] = rhs.loads[i][j];
}
}
}
赋值运算符:
Solution& operator=(const Solution& rhs) {
if (this != &rhs) {
for (int i = 0; i < rows; i++)
delete[] loads[i];
delete[] loads;
loads= new double* [rows];
for (int i = 0; i < rows; i++) {
loads[i] = new double[cols];
for (int j = 0; j < cols; j++) {
loads[i][j] = rhs.loads[i][j];
}
}
}
return*this;
}
这是析构函数:
~Solution() {
for (int i = 0; i < rows; i++)
delete[] loads[i];
delete[] loads;
}
我使用 *Deleaker * 来跟踪泄漏发生的位置,它说在复制和赋值运算符中使用 "new" 分配内存会导致内存泄漏。请注意,我不能在这里使用向量(我使用的是向量,它很好,但我被告知用数组替换它,因为数组应该更快)。