即使在 c++ 中的内存取消分配后,二维数组也会导致内存泄漏 [关闭]

问题描述 投票:0回答:0

我有一个包含二维数组作为私有变量的类。问题是即使内存在析构函数中被取消分配,也会发生内存泄漏。 这是构造函数(“行”和“列”是全局变量)

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" 分配内存会导致内存泄漏。请注意,我不能在这里使用向量(我使用的是向量,它很好,但我被告知用数组替换它,因为数组应该更快)。

c++ memory-leaks destructor
© www.soinside.com 2019 - 2024. All rights reserved.