C++重载operator+和动态内存分配

标签 c++ memory-management memory-leaks operators operator-overloading

我有一个任务要编写一个动态分配二维数组的类,然后我必须编写函数来使用它。其中一个函数是operator+的重载函数。一切都按预期工作,即使是运算符 + 也会起作用,直到程序调用析构函数。析构函数有一个简单的工作:释放先前分配的内存。我知道代码是正确的,并且我已经手动测试过它,但是当计算机在程序末尾调用此函数时,我收到“2DArray.exe 中 0x000566E1 处未处理的异常:0xC0000005:访问冲突读取位置 0xFEEEFEF2”。 我尝试了各种各样的方法,我已经在这个问题上呆了两天了,我已经筋疲力尽了。本周五到期。如果有人可以尝试提供帮助,我将不胜感激。

这是我认为问题所在的两个函数。另外,请注意,当没有析构函数时,程序运行完全正常,但我必须确保在程序退出之前释放内存,这是它的一部分作业的。

 Square_Matrix Square_Matrix::operator+(Square_Matrix & object)
{
    Square_Matrix sum;
    sum.Set_Size(size);
    for (int i = 0; i < size; i++)
    {
        for (int b = 0; b < size; b++)
        {
            sum.Set_Elem((matrix[i][b] + object.Get_Elem(i, b)),i, b);
        }
    }
    return sum;
}

Square_Matrix::~Square_Matrix()
{
    // destructor
    // release the allocated memory

    if (size > 0)
    {
        for (int d = 0; d < size; d++)
        {
            delete[] matrix[d];
        }
        delete[] matrix;

        size = 0;
    }
}

最佳答案

看来您需要一个复制构造函数。

另外,你对operator+的参数应该是const Square_Matrix &object 。您无意更改第二个对象,是吗?告诉编译器。它会感激的。

事实上,您也没有任何意图更改第一个对象,因此您应该声明它 Square_Matrix Square_Matrix::operator+(const Square_Matrix & object) const

第二个const告诉编译器生成 this还有一个 const 指针。

关于C++重载operator+和动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21870576/

相关文章:

COM:我可以在不调用 Release 的情况下调用 CoUninitialize 吗?

c++ - 相邻差异使用什么语法?

c++ - 为什么必须复制 libstdc++-6.dll 才能运行我的 C++ 程序?

c++ - 虚拟继承的内存使用

c++ - *不*在分配的内存上使用 free() 是否可以?

c++ - 内存泄漏 : unable to break on a memory allocation number

Node.JS Dynamodb put 内存问题

c++ - libpcap 和无线信号捕获

c++ - 在 Windows 7 上使用 C++ 程序读取 Windows 注册表

c++ - 我的 std::vector 应该包含指针还是结构?