常见错误: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;
}
}