c++;多项式复制构造函数和ostream覆盖导致内存泄漏?! 我正在研究C++中的一个多项式类。到目前为止,一切都很顺利。但现在我遇到了一个我根本无法发现的错误:/
多项式c++;多项式复制构造函数和ostream覆盖导致内存泄漏?! 我正在研究C++中的一个多项式类。到目前为止,一切都很顺利。但现在我遇到了一个我根本无法发现的错误:/,c++,operator-overloading,copy-constructor,ostream,C++,Operator Overloading,Copy Constructor,Ostream,多项式 // copy-constructor Polynomial::Polynomial(const Polynomial &p){ size = p.size; buffer = p.buffer; poly = new double(buffer); for (int i = 0; i < size; ++i) poly[i] = p[i]; for (int i = size; i
// copy-constructor
Polynomial::Polynomial(const Polynomial &p){
size = p.size;
buffer = p.buffer;
poly = new double(buffer);
for (int i = 0; i < size; ++i) poly[i] = p[i];
for (int i = size; i < buffer; ++i) poly[i] = 0;
}
// output stream override | it's a non-member function
ostream& operator<<(ostream& os, const v1::Polynomial& p){
int degree = p.degree();
stringstream ss;
if (degree == 0) ss << '0';
else if (degree > 0){
ss << '(';
for (int i = degree; i >= 0; --i){
ss << p[i];
ss << "x^";
ss << i;
if (i > 0)
ss << " + ";
}
ss << ')' << endl;
}
os << ss.str();
return os;
}
//复制构造函数
多项式::多项式(常数多项式&p){
尺寸=p.尺寸;
缓冲区=p.buffer;
poly=新的双(缓冲区);
对于(inti=0;idouble
,并将其设置为buffer
。你可能是说
poly = new double[buffer];
或者任何你想要的尺寸
更好的解决方案是使用原始阵列而不是原始阵列。您可以使用=
复制它,使用std::vector::resize
调整它的大小,并使用std::vector::reserve
保留更多空间
在这里,您分配一个double
,并将其设置为buffer
。你可能是说
poly = new double[buffer];
或者任何你想要的尺寸
更好的解决方案是使用原始阵列而不是原始阵列。您可以使用
=
复制它,使用std::vector::resize
调整它的大小,并使用std::vector::reserve
保留更多空间,这里分配的内存在哪里poly=new double(缓冲区)代码>实际删除?“很遗憾,我不知道如何在Visual Studio中调试”F5 IIRC。如果崩溃可能发生,您需要提供degree()
的代码。编写代码的设计更好,这样它就不需要自定义副本构造函数。这里分配的内存在哪里poly=new double(buffer)代码>实际删除?“很遗憾,我不知道如何在Visual Studio中调试”F5 IIRC。如果崩溃可能存在,您需要提供degree()
的代码。编写代码的设计更好,这样就根本不需要自定义副本构造函数。
poly = new double[buffer];