使用复制构造函数和运算符重载 - "未分配正在释放的指针"
Using copy constructor and operator overload - 'pointer being freed was not allocated'
>我创建了一个名为 MyInteger
的类,我正在尝试创建一个复制构造函数,该构造函数将正确创建pInteger
指向的内存的单独副本,并使新对象中的pInteger
指向它。 我需要重载 =
运算符,以便所涉及的两个对象中的每一个都有自己自己的pInteger
指向的内存的单独副本。
MyInteger
规格:
class MyInteger {
public:
MyInteger(int);
MyInteger(MyInteger &);
~MyInteger();
int getMyInt();
void setMyInt(int);
MyInteger operator=(MyInteger&);
private:
int * pInteger;
};
MyInteger
实现:
MyInteger::MyInteger(int i) {
pInteger = new int;
*pInteger = i;
}
MyInteger::MyInteger(MyInteger &obj) {
pInteger = new int;
pInteger = obj.pInteger;
}
MyInteger MyInteger::operator=(MyInteger &i) {
pInteger = new int;
pInteger = i.pInteger;
return i;
}
MyInteger::~MyInteger() {
delete pInteger;
}
int MyInteger::getMyInt() {
return *pInteger;
}
void MyInteger::setMyInt(int i) {
pInteger = new int;
*pInteger = i;
}
我很确定问题至少部分是由于我在构造函数和运算符重载中重新分配pInteger
:pInteger = new int;
然后pInteger = obj.pInteger;
. 我认为第二个作业是使用 new
使第一个作业无效,所以我得到
未分配正在释放的指针
因为pInteger
没有正确动态分配。 我在这里走对了吗? 我不确定如何解决这个问题,任何帮助都会很棒。
MyInteger::MyInteger(MyInteger &obj) {
pInteger = new int;
pInteger = obj.pInteger;
}
MyInteger MyInteger::operator=(MyInteger &i) {
pInteger = new int;
pInteger = i.pInteger;
return i;
}
您pInteger
分配正确的值 - 指向新分配的整数。然后你立即用错误的值覆盖它 - 一个指向另一个对象拥有的整数的指针。
此外,您的operator=
会返回一份副本。你会期望(j = i)++;
修改j
,而不是临时的。
相关文章:
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 调用析构函数以释放动态分配的内存
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 错误:malloc:对象 0x7f9edf504080 的 *** 错误:未分配正在释放的指针
- 给定一个指向堆分配内存的指针,智能指针实现如何为其找到合适的释放函数?
- 是否可以使用分配器对象来释放另一个分配器分配的内存?
- 释放动态分配的内存时是否需要执行此额外步骤
- 整数内存分配/释放
- 我是否需要在 c++ 中从本地指针中释放分配的内存?
- 未分配释放C++(C 字符串)指针
- 未分配被释放的指针(将堆栈实现为链表时)
- 在不释放所有动态分配的资源的情况下结束程序是否有风险
- Unique_ptr:在列表中放置时未分配释放的指针
- C++内存分配/释放和自由空间错误
- 带有QT的C 应用中的IIMEBRA代码给出malloc:***对象XXXXXX的错误:未分配释放的指针
- 删除引用时出现未分配释放的指针错误
- 指针的内存分配/释放
- 内存分配/释放错误(非常小的代码)
- c++堆内存分配/释放
- 内存管理——用于分配/释放I/O缓冲区的现代c++风格