请大家帮我看看这个关于循环链表的程序为什么出现访问违例(段异常)

seas 2010-06-22 09:59:08
是在DEVC++环境下编译的,编译没有问题,就是运行时出错。

#include<stdio.h>
#include<malloc.h>
typedef struct node
{
char data;
struct node *prior,*next;
}DLink;

void InitList(DLink *L)
{
L=(DLink *)malloc(sizeof(DLink));
L->prior=L->next=L;
}

int GetLength(DLink *L)
{
int i=0;
DLink *p=L->next;
while(p!=L)
{
i++;
p=p->next;
}
return i;
}

int InsElem(DLink *L,char x,int i)
{
int j=1;
DLink *p=L,*s;
s=(DLink *)malloc(sizeof(DLink));
s->data=x;s->prior=s->next=NULL;
if(i<1||i>GetLength(L)+1)
return 0;
while(j<i)
{
p=p->next;j++;
}
s->next=p->next;
s->next->prior=s;
p->next=s;
s->prior=p;
return 1;
}

main()
{
int i;
DLink *LL;
InitList(LL);
InsElem(LL,'a',1);
system("pause");
}
...全文
114 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cattycat 2010-06-22
  • 打赏
  • 举报
回复
void InitList(DLink **L)用二级指针,不然你的参数值仍然不会被改变。注意形参和实参区别。
seas 2010-06-22
  • 打赏
  • 举报
回复
恕本人愚钝,请大家说清楚具体要怎样修改才行?
赵4老师 2010-06-22
  • 打赏
  • 举报
回复
我试过DevC++设置语言为英文时可以单步调试
赵4老师 2010-06-22
  • 打赏
  • 举报
回复
单步调试和设断点调试是程序员必须掌握的技能之一。
wdy0725 2010-06-22
  • 打赏
  • 举报
回复
LZ 这个函数有问题:

void InitList(DLink *L)
{
L=(DLink *)malloc(sizeof(DLink));
L->prior=L->next=L;
}

InitList(LL); // 这里LL没有被分配到空间。应该用双重指针(也就是 **)或引用指针。
Poptang 2010-06-22
  • 打赏
  • 举报
回复
void InitList(DLink *L)有问题
Poptang 2010-06-22
  • 打赏
  • 举报
回复
不要在函数内为局部指针申请空间
seas 2010-06-22
  • 打赏
  • 举报
回复
的确是这一段的问题,
void InitList(DLink *L)
{
L=(DLink *)malloc(sizeof(DLink));
L->prior=L->next=L;
}
可以用双重指针,也可以作如下修改,直接用子函数返回值:
DLink * InitList()
{
DLink *L;
L=(DLink *)malloc(sizeof(DLink));
L->prior=L->next=L;
return L;
}
再一次感谢大家的热情解答!
wzyzb 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 seas 的回复:]

谢谢大家的热情解答,这按大家讲的改过之后,发现在
s->next->prior=s;
这一句代码上又出问题了,是不可能使用这种格式吗?
[/Quote]
void InitList(DLink **L)
{
*L=(DLink *)malloc(sizeof(DLink));
(*L)->prior=(*L)->next=*L;
}
这样修改应该没问题了吧?
seas 2010-06-22
  • 打赏
  • 举报
回复
谢谢大家的热情解答,这按大家讲的改过之后,发现在
s->next->prior=s;
这一句代码上又出问题了,是不可能使用这种格式吗?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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