【发布时间】:2014-02-19 03:44:37
【问题描述】:
我有一个任务要编写一个动态分配二维数组的类,然后我必须编写函数来处理它。其中一个函数是 operator+ 的重载函数。一切都按预期工作,即使是 operator+ 函数,直到程序调用析构函数。析构函数的工作很简单,就是释放之前分配的内存。我知道代码是正确的并且我已经手动测试过,但是当计算机在程序结束时调用此函数时,我得到“2DArray.exe 中 0x000566E1 处的未处理异常:0xC0000005:访问冲突读取位置 0xFEEEEF2。” 我尝试了各种各样的东西,我已经坐在这个问题上两天了,我已经筋疲力尽了。本周五到期。如果有人可以尝试并提供帮助,我将不胜感激。
这是我认为问题所在的两个函数。另外,请注意,当没有析构函数时,程序运行完全正常,但我必须确保在程序退出之前释放内存,这是它的一部分的任务。
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;
}
}
【问题讨论】:
-
请同时显示构造函数和复制构造函数,以防万一出现问题。
-
构造函数中的内存是如何分配的?还有,set_size() 是什么样子的?
-
我没有复制构造函数。这可能是问题吗?
-
@glina126:是的。谷歌搜索“C++ 规则三”应该会得到很多信息。
-
好的,非常好。我会阅读的。谢谢!
标签: c++ memory-management memory-leaks operators operator-overloading