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];