这个错误在哪,应该怎么改


#include
#include

using namespace std;

struct F
{
    double a;
    double n;
};

class Polynomial
{
private:
    F* p;
    int length;
public:
    Polynomial();
    Polynomial(int m);
    Polynomial(const Polynomial& A);
    ~Polynomial();

    void get();
    void set();

    Polynomial operator+(const Polynomial&A);
    Polynomial operator-(const Polynomial& A);
    Polynomial operator*(const Polynomial& A);
    Polynomial& operator=(const Polynomial& A);

    void simple();
};

Polynomial::Polynomial():length(1)
{
    p = new F[1];
    p[0].a = 1;
    p[0].n = 1;
}

Polynomial::Polynomial(int m):length(m)
{
    p = new F[length];
    for (int i = 0; i < length; i++)
    {
        p[i].a = 1;
        p[i].n = 1;
    }
}

Polynomial::Polynomial(const Polynomial& A)
{
    if (p)
        delete p;
    length = A.length;
    p = new F[length];
    for (int i = 0; i < length; i++)
    {
        p[i].a = A.p[i].a;
        p[i].n = A.p[i].n;
    }
}

Polynomial::~Polynomial()
{
    if (p)
        delete[]p;
}

void Polynomial::get()
{
    for (int i = 0; i < length; i++)
    {
        if (i == 0)
        {
            if(p[i].a)
                cout << p[i].a << "*x" << 'e' << p[i].n;
        }
        else
        {
            if(p[i].a>0)
                cout << '+'<p[i].a<0)
                cout <Polynomial::set()
{
    for (int i = 0; i < length; i++)
    {
        cin >> p[i].a >> p[i].n;
    }
}

Polynomial Polynomial::operator+(const Polynomial& A)
{
    Polynomial b;
    if (b.p)
        delete[]b.p;
    b.p = new F[length + A.length];
    b.length = length + A.length;
    int i,j,k=0;
    int l = b.length;
    for (i = 0; i < length; i++)
    {
        b.p[k].a = p[i].a;
        b.p[k].n = p[i].n;
        k++;
    }
    for (j = 0; j < A.length; j++)
    {
        b.p[k].a = A.p[j].a;
        b.p[k].n = A.p[j].n;
        k++;
    }
    b.simple();
    return b;

}
Polynomial Polynomial::operator-(const Polynomial& A)
{
    Polynomial b;
    if (b.p)
        delete[]b.p;
    b.p = new F[length + A.length];
    b.length = length + A.length;
    int i, j, k = 0;
    int l = b.length;
    for (i = 0; i < length; i++)
    {
        b.p[k].a = p[i].a;
        b.p[k].n = p[i].n;
        k++;
    }
    for (j = 0; j < A.length; j++)
    {
        b.p[k].a = -A.p[j].a;
        b.p[k].n = A.p[j].n;
        k++;
    }
    b.simple();
    return b;

}
Polynomial Polynomial::operator*(const Polynomial& A)
{
    Polynomial b;
    if (b.p)
        delete[]b.p;
    int k = 0;
    b.p = new F[length * A.length];
    b.length = length * A.length;
    for (int i = 0; i < length; i++)
    {
        for (int j = 0; j < A.length; j++)
        {
            b.p[k].a = p[i].a * A.p[j].a;
            b.p[k].n = p[i].n + A.p[j].n;
            k++;
        }

    }
    b.simple();
    return b;

}
Polynomial& Polynomial::operator=(const Polynomial& A)
{
    if (p)
        delete[]p;
    p = new F[A.length];
    length = A.length;
    for (int i = 0; i < A.length; i++)
    {
        p[i].a = A.p[i].a;
        p[i].n = A.p[i].n;
    }
    return *this;
}

void Polynomial::simple()
{
    int l = length;
    for (int i = 0; i < l-1; i++)
    {
        for (int j = i + 1; j < l; j++)
        {
            if (p[j].n == p[i].n)
            {
                p[i].a += p[j].a;
                p[j].a = 0;
                length--;
            }
        }
    }
    Polynomial b;
    if (b.p)
        delete[]b.p;
    b.p = new F[length];
    b.length = length;
    int k = 0;
    for (int i = 0; i < l; i++)
    {
        if (p[i].a)
        {
            b.p[k].a = p[i].a;
            b.p[k].n = p[i].n;
            k++;
        }
    }

    *this = b;

}






int main()
{
    Polynomial u1(4), u2(3);
    u1.get();
    u2.get();
    u1.set();
    u2.set();
    u1.get();
    u2.get();
    Polynomial u3;
    u3 = u1 + u2;
    u3.get();
    u3 = u1 - u2;
    u3.get();
    u3 = u1 * u2;
    u3.get();



}

会发生如下问题

img


应该怎么解决

应该是delete调用了多次,造成重复释放了。