常见错误:C++Debug Assertion Failed!

 

题目十三:递增有序单链表L1、L2,不申请新结点,利用原表结点对两表进行合并,并使得合并后成为一个集合,合并后用L1的头结点作为头结点,删除L2的头结点,要求时间性能最好。

我在子函数里直接把L2 的头结点delete了,然后就出现这个错误。

这个问题处理:在结构体的子函数里不要随表delete一个链表的头结点,否则程序结束后,自动调用的析构函数会因找不到头结点对应的指针而发生错误

也就是野指针

 

 

第十三题

void List::conbine(List &L2)
{
    creat_insert_end();
    L2.creat_insert_end();
    cout<<endl;
    node * p=L,* p2=L2.L;
    node * r=p2->next;

    while(p->next!=NULL && r!=NULL)
    {
        if(p->next->data >= r->data)
        {
            p2->next=r->next;
            r->next=p->next;
            p->next=r;
            r=p2->next;
            p=p->next;
        }
        else if(p->next->data<r->data)
        {
            p=p->next;
        }
    }
    if(p->next==NULL)//L1先结束
    {
        p->next=r;
    }
   // delete L2.L;这里就不用delete了,程序结束后析构函数自动delete
    p2=NULL;
    cout<<"合并后为:"<<endl;
    show();

}

 

析构函数:

List::~List()//第三题:销毁链表
{
    node * p=L;//如果前面L2delete掉,这里的p就成了野指针
    node * r;
    while(p!=NULL)
    {
        r=p->next;
        delete p;
        p=r;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值