写了一段单链表的C++代码,编译没错,运行的时候弹出错误

sbtgh1 2007-03-29 11:08:46
写了一段单链表的C++代码,编译没错,运行的时候弹出错误
我的文件名是
l1
执行l1.exe的时候出错了,提示“l1.exe遇到问题需要关闭”
然后就是“prass any key to continue"
错误信息开始的一些是这样的:
Exception Infomation
code:0xc0000005 Flags: 0x00000000
Record: 0x00000000000000000 Address: 0x00000000004010b2
请问是什么地方出错了?
...全文
456 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
angus2887 2007-04-17
  • 打赏
  • 举报
回复
没有考虑到异常情况,在链表为空的情况下insert的时候自然就会报错。
jixingzhong 2007-04-16
  • 打赏
  • 举报
回复
void initlist (list &L){
L.num=0;
s1.head=NULL;
}
super_strong 2007-04-16
  • 打赏
  • 举报
回复
没有对异常进行处理,内存分配有错
kouzhongling 2007-04-01
  • 打赏
  • 举报
回复
大概看了一下
initlist(s1);
initlist(s2);
初始化后s1.num=0 s1.head=????
然后insertlist
这时
linknode *h=L.head;//*h=????
p->date=e;
p->next=h->next;//p,next=h.next=????

sbtgh1 2007-04-01
  • 打赏
  • 举报
回复
#include<iostream.h>
#include<stdio.h>
typedef struct node{
int date;
struct node *next;
}linknode;
typedef struct {
int num;
linknode *head;
}list;
void initlist (list &L){
L.num=0;
}
void insertlist(list &L,int e){
linknode *p=new linknode();
linknode *h=L.head;
p->date=e;
p->next=h->next;
h->next=p;
L.num++;
}
void marlist(list s1,list s2,list &s3)
{
linknode *p,*p1,*p2;
p=s3.head;
p1=s1.head;
p2=s2.head;
if(p1->date<p2->date)
{
p=p1;
p1=p1->next;
s3.num++;
}
else{
p=p2;
p2=p2->next;
s3.num++;
}
while(p1!=NULL||p2!=NULL)
{
if(p2->date<p1->date)
{
p->next=p2;
p=p2;
p2=p2->next;
s3.num++;
}
else
{
p->next=p1;
p=p1;
p1=p1->next;
s3.num++;
}
}

}
void main()
{
list s1,s2,s3;
initlist(s1);
initlist(s2);
for(int i=0;i<5;i++){
insertlist(s1,i*2);
insertlist(s2,i*2+1);
}
marlist(s1,s2,s3);
linknode *p=s3.head;
while(p!=NULL){

cout<<p->date<<" ";
p=p->next;}

}
这里是代码
lizhendi1021 2007-03-31
  • 打赏
  • 举报
回复
这种情况一般是没给指针分配内存空间.
不想低调 2007-03-31
  • 打赏
  • 举报
回复
要说清楚。。
代码很重要/。。
stoneyrh 2007-03-29
  • 打赏
  • 举报
回复
题目出错了
jixingzhong 2007-03-29
  • 打赏
  • 举报
回复
参考:

#include <iostream>

using namespace std;

#define NOFOUND -1
#define FOUND 0
#define SUCCEED 0
#define FAIL -1
typedef struct {
int x,y;
}ElemType;
class Item
{
public:
int mx,my;
Item(int a=0,int b=0)
{
mx=a;my=b;
}
Item *mNxtItem; //Point to Next Element
};
//Define Abstract Data Type-----List
class List
{
public:
//Element Set
Item *mList;
//Operator Set
void mfInitList(List &l);
void mfDestoryList(List &l);
void mfClearList(List &l);
bool mfListEmpty(List l);
int mfListLength(List &l);
int mfGetElem(List l,int i,Item &e);
int mfLocateElem(List l,Item e,bool compare(Item e1,Item e2));
void mfPrior(List l,int i,Item &e);
void mfNextElem(List l,int i,Item &e);
int mfListInsert(List &l,int i,Item e);
void mfListDelete(List &l,int i,Item &e);
void mfListTraverse(List l,void visit(Item e));
};
//Define Global Function
bool gfEqual(Item e1,Item e2)
{
return((e1.mx==e2.mx)&&(e1.my==e2.my));
};
void gfDisplay(Item e)
{
cout<<"mx="<<e.mx<<";my="<<e.my<<endl;
}
//End Define Global Function
void List::mfInitList(List &l)
{
l.mList=NULL;
};
bool List::mfListEmpty(List l)
{
return(l.mList==NULL);
};
void List::mfDestoryList(List &l)
{
delete l.mList;
};
void List::mfClearList(List &l)
{
Item *p,*temp;
p=l.mList;
while(p)
{
temp=p->mNxtItem;
delete p;
p=temp;
}
delete p;
l.mList=NULL;
};
int List::mfListLength(List &l)
{
int ilen=0;
Item *p=l.mList;
while(p)
{
ilen++;
}
return ilen;
};
int List::mfGetElem(List l,int i,Item &e)
{
int j=1;
Item *p;
p=l.mList;
while(p&&j!=i)
{
p=p->mNxtItem;
j++;
}
if(p) {e=*p;return FOUND;}
return NOFOUND;
};
int List::mfLocateElem(List l,Item e,bool compare(Item e1,Item e2))
{
Item *p=l.mList;
int i=0;
while(p)
{
i++;
if(compare(*p,e)) break;
p=p->mNxtItem;
}
if(p) return i;
return NOFOUND;
};
int List::mfListInsert(List &l,int i,Item e)
{
Item *p=l.mList;
Item *insP,*nxtP;
int j=1;
if(!l.mList) {insP=new Item();insP->mx=e.mx;insP->my=e.my;insP->mNxtItem=NULL;l.mList=insP;return SUCCEED;}
if(i==1) {
insP=new Item();insP->mx=e.mx;insP->my=e.my;nxtP=l.mList;
l.mList=insP;insP->mNxtItem=nxtP;return SUCCEED;
}
while(p&&j<i-1)
{
j++;
p=p->mNxtItem;
}
if(p){
insP=new Item();
if(insP==NULL) return FAIL;
insP->mx=e.mx;insP->my=e.my;
nxtP=p->mNxtItem;
insP->mNxtItem=nxtP;
p->mNxtItem=insP;
return SUCCEED;
}
return FAIL;
};
void List::mfListTraverse(List l,void visit(Item e))
{
Item *p=l.mList,e;
if(!l.mList) {cout<<"List Is Empty,Traverse Failed!"<<endl;return;}
while(p)
{
e.mx=p->mx;e.my=p->my;
visit(e);
p=p->mNxtItem;
}
}
void List::mfListDelete(List &l,int i,Item &e)
{
Item *p,*preP,*nxtP;
p=l.mList;
if(!l.mList) {cout<<"ERROR,The List Is Empty!"<<endl;
return ; }
if(i==1) {l.mList=p->mNxtItem;delete p;return;}
while(p&&i>2)
{
p=p->mNxtItem;
i--;
}
preP=p; //指向删除结点的前一个结点
nxtP=p->mNxtItem->mNxtItem; //指向删除结点的后一个结点
preP->mNxtItem=nxtP; //要删除的结点前一个结点的指针域,指向删除结点的后一个结点
p=p->mNxtItem;
delete p;
}

int main()
{
int i;
List l;
//List *k=new List();
Item e;
l.mfInitList(l);
for(i=1;i<=10;i++)
{
e.mx=i;e.my=i;
l.mfListInsert(l,i,e);
}
l.mfListTraverse(l,gfDisplay);
l.mfListDelete(l,10,e);
l.mfListTraverse(l,gfDisplay);

system("pause");
return 0;
}
jixingzhong 2007-03-29
  • 打赏
  • 举报
回复
访问非法内存了?
健之 2007-03-29
  • 打赏
  • 举报
回复
贴源程序

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧