永发信息网

亲,帮我看一下我的 链表 产生的段错误是什么原因

答案:2  悬赏:50  手机版
解决时间 2021-03-03 02:24
  • 提问者网友:川水往事
  • 2021-03-02 22:33
我是在知道上看到你帮别人回答的,所以直接向你提问啦,耽误亲一会时间
代码如下:
#include
#include
typedef struct Node{
int data;
struct Node *next;
}Node;
Node *create(int n);
void insert(Node *head,int data,int n);
void display(Node *head);
void delete(Node *head,int n);
void my_free(Node *head);
int main()
{
Node *head;
int n;
printf("请输入元素个数:");
scanf("%d",&n);
printf("请输入数据:\n");
create(n);
display(head);
my_free(head);
return 0;
}

Node *create(int n)
{
Node *head,*pnew; int i;
head = (Node*)malloc(sizeof(Node));
head -> next = NULL;
for(i = 0;i < n; i++)
{
pnew = (Node*)malloc(sizeof(Node));
if (pnew == NULL)
printf("内存申请失败.");
else{
pnew -> next = NULL;
scanf("%d",&(pnew -> data));
pnew ->next = head -> next;
head -> next = pnew;
}
}return head;
}

void insert(Node *head,int data,int n)
{
Node *p,*pnew; int j = 0;
p = head;
while((p != NULL)&&(j < n)) {
p = p -> next;
j ++;
}
pnew -> next = p -> next;
p ->next = pnew;
pnew ->data = data;
}

void delete(Node *head,int n)
{
Node *p,*temp;int j = 0;
p = head;
while((j < n)&&(p != NULL) ){
p = p -> next;
j++;
}
temp = p -> next;
p -> next = temp -> next;
free(temp);
temp = NULL;
}

void my_free(Node *head)
{
Node *p,*q; p = head;
while(p != NULL)
{
q = p -> next;
free(p);
p = q;
}
}

void display(Node *head)
{
Node *p;
p = head -> next;
while(p != NULL)
{
printf("%d ",p -> data);
p = p -> next;
}
}运行结果:
请输入元素个数:3
请输入数据:
1
2
3
段错误
最佳答案
  • 五星知识达人网友:爱难随人意
  • 2021-03-02 23:21
int main()
{
Node *head;
int n;
printf("请输入元素个数:");
scanf("%d",&n);
printf("请输入数据:\n");
create(n);
display(head);
my_free(head);
return 0;
}
这一段主函数代码中的create()函数所返回的值并没有赋给结构变量head,所以之后的函数所访问的结构变量是不存在的,所以会出现段错误,提示段错误主要是后面调用的free()中的变量并不存在空间地址,所以提示段错误。
全部回答
  • 1楼网友:拾荒鲤
  • 2021-03-02 23:59

struct student {  int num;  int score;  struct student *p; }; int main() {  struct student a,b;  struct student *head;  struct student *m;  a.num=

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯