标题:关于链表出现debug assertion failed
只看楼主
小散
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2009-6-26
 问题点数:0 回复次数:2 
关于链表出现debug assertion failed
关于链表出现debug assertion failed

这是个关于链表的问题  
将两个链表(结点中data(int类型)从小到大排列)合并成一个data从大到小排列的新链表 各结点的地址不改变
我是定义了一个拷贝构造函数做的
代码如下  输出正常  但是有错误警告出现 debug assertion failed
求高人解答

#include <iostream.h>
struct Node
{
    int data;
    Node *next;
};
class LinkList
{   
        Node *first;   
    public:
        LinkList(){first=new Node;first->next=NULL;}
        LinkList(int a[],int n);
        LinkList(LinkList &m1,LinkList &n1);
        ~LinkList();
        int Length();
        int Get(int i);
        int Locate(int x);
        void Insert(int i,int x);
        int Delete(int i);
        void PrintList();
};
LinkList::LinkList(int a[],int n)
{
    first=new Node;
    Node *r=first;
    for(int i=0;i<n;i++)
    {
        Node *s=new Node;s->data=a[i];
        r->next=s;r=s;
    }
    r->next=NULL;
}
LinkList::LinkList(LinkList &m1,LinkList &n1)
{
    first=new Node;
    first->next=NULL;
    Node *p1=first;
    Node *pm=m1.first->next,*pn=n1.first->next,*s;
    while(pm||pn)
    {
        if(pm&&pn&&pm->data<=pn->data||!pn)
        {
        s=pm;pm=pm->next;
        }
        else
        {
        s=pn;pn=pn->next;
        }
        s->next=p1->next;
        p1->next=s;
    }
}
LinkList::~LinkList()
{
    Node *p=first;
    while(p)
    {
        Node *q=p;
        p=p->next;
        delete q;
    }
}
int LinkList::Length()
{
    Node *p=first->next;
    int j=1;
    while(p)
    {
        p=p->next;
        j++;
    }
    return j;
}
int LinkList::Get(int i)
{
    Node *p=first->next;
    int j=1;
    while(p&&j<i)
    {
        p=p->next;
        j++;
    }
    if(!p)throw"位置";
        else return p->data;
}
int LinkList::Locate(int x)
{
    Node *p=first->next;
    int j=1;
    while(p->data!=x)
    {
        p=p->next;
        j++;
    }
    if(!p)throw"位置";
    return j;
}
void LinkList::Insert(int i,int x)
{
    Node *p=first;
    int j=0;
    while(p&&j<i-1)
    {
        p=p->next;
        j++;
    }
    if(!p)throw"位置";
    else
    {
        Node *s=new Node;s->data=x;
        s->next=p->next;
        p->next=s;
    }
}
int LinkList::Delete(int i)
{
    Node *p=first;
    int j=0;
    while(p&&j<i-1)
    {
        p=p->next;
        j++;
    }
    if(!p||!p->next)throw"位置";
    else
    {
        Node *q=p->next;int x=q->data;
        p->next=q->next;
        delete q;
        return x;
    }
}
void LinkList::PrintList()
{
    Node *p=first->next;
    while(p)
    {
        cout<<p->data<<endl;
        p=p->next;
    }
    cout<<'\n'<<"完成"<<endl;
}
void main()
{
    int a[6]={1,2,3,4,5,6},b[7]={7,12,14,23,24,35,43};
    LinkList m(a,6),n(b,7);
    LinkList p(m,n);
    p.PrintList();
}
搜索更多相关主题的帖子: failed debug 链表 assertion 
2009-09-25 12:28
小散
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2009-6-26
得分:0 
怎么没人理啊
2009-09-27 18:58
bccnbin2009
Rank: 7Rank: 7Rank: 7
来 自:浙江
等 级:黑侠
帖 子:86
专家分:602
注 册:2009-10-5
得分:0 
我测试了一下,你的程序基本没问题,应该是析构函数的执行出现了错误。
程序中总共定义了三个对象,即执行了三次构造函数,顺序为:m,n,p
那么程序结束后,析构函数的执行顺序为:p,n,m,p的析构执行没问题,而是n和m得析构出现了错误,
至于怎么解决,我还不清楚,再找个高手调调吧,不好意思,呵呵

不过你若把析构函数给扔掉,程序就没问题了,试试吧

滨封千里
2009-10-05 16:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-286886-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019479 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved