类指针内存问题
Class Pointer Memory Issue
我已经修剪了它,所以问题仍然出现。 我将能够摆脱我为作业创建的内容,但是,内存管理导致了一些问题。 如果我在复制它时运行此代码,则当它转到重载的<<函数时,它会挂起。
我相信我已经正确完成了内存分配,根据在C++构造函数中分配内存的正确方法是什么?。 我无法判断错误来自哪里。
#include <iostream>
#include <iomanip>
using namespace std;
class Poly
{
private:
int order; //order of the polynomial
int size; //order + 1
int * coeff;//pointer to array of coeff on the heap
public:
Poly();
Poly(int Order);
Poly(int Order, int * Coeff);
~Poly(){delete [] coeff; cout << "Destructorn";};
Poly(const Poly &rhs);
//accessors & mutators
void set(int * Coeff, int Order);
//Overloaded Operators
Poly operator+(const Poly &rhs);
Poly & operator=(const Poly &rhs);
friend ostream & operator<<(ostream & Out, const Poly &rhs);
};
int main()
{
int coeff1[ ] = {-38,2,-24,6,4};
int coeff2[ ] = {-38,2,-14,0,0,10,0,4};
int size;
bool flag;
Poly P1(4, coeff1);
Poly P2(7, coeff2);
Poly P3;
P3 = P1 + P2;
cout << "P1 + P2: " << P3;
return 0;
}
Poly::Poly()
{
order = 0;
size = order + 1;
coeff = new int[size];
coeff[0] = 0;
cout << "Default Constructorn";
}
Poly::Poly(int Order)
{
order = Order;
size = order + 1;
coeff = new int[size];
for(int i(0); i <= order; i++)
coeff[i] = 0;
cout << "Order Constructorn";
}
Poly::Poly(int Order, int * Coeff)
{
order = Order;
size = order + 1;
coeff = new int[size];
for(int i(0); i <= order; i++)
coeff[i] = Coeff[i];
cout << "Complete Constructorn";
}
Poly::Poly(const Poly &rhs)
{
order = rhs.order;
size = rhs.size;
int *coeff = new int[size];
for(int i(0); i <= order; i++)
coeff[i] = rhs.coeff[i];
cout << "Copy Constructorn";
}
void Poly::set(int * Coeff, int Order)
{
order = Order;
size = order + 1;
for(int i(0); i <= order; i++)
coeff[i] = Coeff[i];
}
Poly Poly::operator+(const Poly &rhs)
{
int neworder = max(order, rhs.order);
int * newcoeff = new int[neworder+1];
Poly temp(neworder, newcoeff);
delete [] newcoeff;
for(int i(0); i <= temp.order; i++)
temp.coeff[i] = 0;
for(int i(0); i <= order; i++)
temp.coeff[i] = coeff[i];
for(int i(0); i <= rhs.order; i++)
temp.coeff[i] += rhs.coeff[i];
return Poly(temp.order, temp.coeff);
}
ostream &operator <<(ostream& out, const Poly &source)
{
for(int i(source.order); i >= 0; i--)
{
if(i == 1)
{
if(i == source.order)
if(source.coeff[i] == 1)
out << "X";
else if(source.coeff[i] == -1)
out << "-X";
else
out << source.coeff[i] << "X";
else if(source.coeff[i] == 1)
out << " + " << "X";
else if(source.coeff[i] == -1)
out << " - " << "X";
else if(source.coeff[i] > 0)
out << " + " << source.coeff[i] << "X";
else if(source.coeff[i] < 0)
out << " - " << abs(source.coeff[i]) << "X";
}
else if(i > 1)
{
if(i == source.order)
if(source.coeff[i] == 1)
out << "X^" << i;
else if(source.coeff[i] == -1)
out << "-X^" << i;
else
out << source.coeff[i] << "X^" << i;
else if(source.coeff[i] == 1)
out << " + " << "X^" << i;
else if(source.coeff[i] == -1)
out << " - " << "X^" << i;
else if(source.coeff[i] > 1)
out << " + " << source.coeff[i] << "X^" << i;
else if(source.coeff[i] < -1)
out << " - " << abs(source.coeff[i]) << "X^" << i;
}
else
{
if(source.coeff[i] > 0)
out << " + " << source.coeff[i];
else if(source.coeff[i] < 0)
out << " - " << abs(source.coeff[i]);
}
}
out << endl;
return out;
}
Poly & Poly::operator=(const Poly &rhs)
{
order = rhs.order;
for(int i(0); i <= rhs.order; i++)
coeff[i] = rhs.coeff[i];
return *this;
}
呃...这看起来是个坏主意:
Poly Poly::operator*(const Poly &rhs)
{
Poly temp;
//...
temp.set(newcoeff, neworder);
这看起来很糟糕,因为Poly temp
设置了一个 0 阶多项式,但Poly::set
不会将coeff
重新分配给 neworder
指定的新大小。
Poly::set
应该delete [] coeff
并将其重新分配给新订单指定的新大小。
我没有查看代码的其余部分,看看是否有其他类似的错误,但这个错误立即跳出来了。
对于更可靠的解决方案,应考虑将int *
替换为 vector<int>
,并让编译器和运行时为您管理内存。 您甚至不需要跟踪大小,因为vector<>::size()
会自动为您执行此操作。
相关文章:
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- 包含矢量指针的结构的内存释放问题
- 在函数中分配内存时出现问题
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- 释放内存(主题模板)时出现问题
- C++ 中 std::vector 的内存问题
- C++ DLL 堆内存分配问题
- 在我的以下代码中获取 MLE(内存限制错误).尝试解决 ROUND C 2019(问题 A-摆动行走)启动问题
- 字符 * 未从重载运算符或内存管理问题正确返回
- delete[]有问题,如何部分删除内存
- 内存泄漏问题
- 指向动态内存中结构中的变量时出现问题
- c++中的内存管理问题
- C++堆栈内存管理问题
- 为什么我的C 代码在Linux上运行,而在Windows上不运行,是否有RAM内存的问题
- JNA 参数问题:内存访问无效
- boost的问题::内存映射~500MB,外部USB文件