c++重载运算符+和动态内存分配
c++ overloading operator+ and dynamic memory allocation
我有一个赋值,要写一个动态分配2D数组的类,然后我必须写函数来处理它。其中一个函数是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;
}
}
看起来您需要一个复制构造函数。
此外,运算符+的参数应该是const Square_Matrix &object
。你无意更改第二个对象,是吗?告诉编译器。它会很感激的。
事实上,您也不打算更改第一个对象,所以您应该声明它为Square_Matrix Square_Matrix::operator+(const Square_Matrix & object) const
第二个const
告诉编译器使this
也成为const指针。
当您删除动态分配数组中的所有值时,您正在释放整个数组。
for (int d = 0; d < size; d++)
{
delete[] matrix[d];
}
你必须删除线路
delete[] matrix;
那么它应该停止给出异常。
相关文章:
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 在没有动态内存的世界中,我是否需要虚拟析构函数?
- c++ 动态内存 堆栈中的分配
- 给定特定内存地址的数组的动态内存分配
- 释放动态内存时C++错误
- 我刚刚了解了C++中的动态内存分配
- 无法删除布尔动态内存分配
- 有没有办法找到动态内存大小,比如大小?
- 我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?
- 具有对齐存储的动态内存分配
- 指向数组unique_ptr在调用 release() 后会自动释放动态内存,这是真的吗?
- 在cpp中使用boost-python的python代码是否进行动态内存分配
- 我应该在这个程序中使用静态内存分配还是动态内存分配
- C++ 模板函数中的动态内存分配
- 指向动态内存中结构中的变量时出现问题
- C++具有动态内存分配的 constexpr 函数
- 动态内存分配错误
- 按引用传递和动态内存分配之间的区别是什么