m0_73565969 2023-03-23 16:50 采纳率: 53.8%
浏览 24
已结题

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


#include<iostream>
#include<cmath>

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 << "*x" << 'e' << p[i].n;
            else if(p[i].a<0)
                cout <<p[i].a << "*x" << 'e' << p[i].n;
        }
    }
    cout << endl;
}

void 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


应该怎么解决

  • 写回答

2条回答 默认 最新

  • threenewbee 2023-03-23 16:59
    关注

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

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月7日
  • 创建了问题 3月23日

悬赏问题

  • ¥15 问题遇到的现象和发生背景 360导航页面千次ip是20元,但是我们是刷量的 超过100ip就不算量了,假量超过100就不算了 这是什么逻辑呢 有没有人能懂的 1000元红包感谢费
  • ¥30 计算机硬件实验报告寻代
  • ¥15 51单片机写代码,要求是图片上的要求,请大家积极参与,设计一个时钟,时间从12:00开始计时,液晶屏第一行显示time,第二行显示时间
  • ¥15 用C语言判断命题逻辑关系
  • ¥15 原子操作+O3编译,程序挂住
  • ¥15 使用STM32F103C6微控制器设计两个从0到F计数的一位数计数器(数字),同时,有一个控制按钮,可以选择哪个计数器工作:需要两个七段显示器和一个按钮。
  • ¥15 在yolo1到yolo11网络模型中,具体有哪些模型可以用作图像分类?
  • ¥15 AD9910输出波形向上偏移,波谷不为0V
  • ¥15 淘宝自动下单XPath自动点击插件无法点击特定<span>元素,如何解决?
  • ¥15 曙光1620-g30服务器安装硬盘后 看不到硬盘