花大家一点时间问问,下面代码为什么会出现错误

云端的人 发布于 2013/08/16 20:39
阅读 208
收藏 0

我下面这段代码非常奇怪,只要加上int printlink(struct node *s)这个函数就会出现段错误,如果注释掉这个函数就没问题,很奇怪,百思不得其解,拜托大侠帮我看看,纯新手求教了!

 #include<stdio.h>
  2 #include<stdlib.h>
  3 typedef struct node
  4 {
  5    int date;
  6    struct node *next;
  7 }Node,*linklist;
  8 
  9 
 10 linklist one_creat_link()
 11 {
 12    linklist P,H;
 13    H=NULL;
 14    P=(linklist)malloc(sizeof(Node));
 15    H=(linklist)malloc(sizeof(Node));
 16    printf("please enter a vaule\n");
 17    int a=0;
 18    int i=3;
 19    scanf("%d",&a);
 20    getchar();
 21    for (i=0;i<=3;i++)
 22    {
 23       P->date=a;

24       P->next=H;

 25       H=P;
 26       P=(linklist)malloc(sizeof(Node));
 27       printf("please enter a vaule\n");
 28       scanf("%d",&a);
 29       getchar();
 30     }
 31    printf("aaaaa");
 32    return H;
 33 }
 34 
 35 int main()
 36 {
 37     printf("dd");
 38    struct node *Head;
 39    Head=one_creat_link();
 40    printf("%d",Head);
 41 
 42    int printlink(struct node *s);
 43    printlink(Head);
 44    return 0;

45 }
 46 
 47 int printlink(struct node *s)
 48 {
 49      struct node *P;
 50      P=s;
 51      if (P!=NULL)
 52      {
 53        printf("%d",P->date);
 54        P=P->next;
 55      }
 56     else
 57      {
 58         return 0;
 59      }
 60 
 61      while(P->next!=NULL)
 62      {
 63         printf("%d",P->date);
 64         P=P->next;
 65      }
66     return 0;
 67 }






加载中
0
中山野鬼
中山野鬼
 if (P!=NULL)
 52      {
 53        printf("%d",P->date);
 54        P=P->next;

 55      }

这里,如果54行 P->NEXT == 0 ,则

61      while(P->next!=NULL)
 62      {
 63         printf("%d",P->date);
 64         P=P->next;
 65      }

这里61行,会0地址读操作,就是段错误。

一眼望穿。设计方法不对。。以前这种错误我也犯,后来发现是设计思想问题。。。

云端的人
云端的人
还有地址是0地址啊,哦 我大概懂了 谢谢你哦!
0
诸葛子房2011
诸葛子房2011
肯定啊,printlink()函数写到main()上面去就没问题了,
诸葛子房2011
诸葛子房2011
回复 @云端的人 :哦,我理解错了
云端的人
云端的人
不是这样子的
0
云端的人
云端的人
代码我改了一下 问题完美解决 谢谢!
0
中山野鬼
中山野鬼

引用来自“云端的人”的答案

代码我改了一下 问题完美解决 谢谢!
链表如果后面没有东西可以指,就指向自己,对应修改判断。现在我已经不用指针链表了。64位下,用指针链表就是sb行为。链表也是全部用索引,32位正整数来指引。
0
g
green葱
代码还可以再简洁,可以自己挑战下自己
返回顶部
顶部