麻烦哪位大佬帮我看一下我的代码,调试一半出了问题,可能还有其他问题,下面是我的错误代码
#include<stdio.h>#include<stdlib.h>
typedef struct node{
int data;
int length = 0;
struct node* next;
}node,*linklist;
linklist createlist(linklist L) {
L = (linklist)malloc(sizeof(node));
L->next = NULL;
node* p;
int x;
printf("请输入十个数字:\n");
for (int i = 0; i < 10; i++)
{
p = (linklist)malloc(sizeof(node));
scanf("%d", &x);
p->data = x;
p->next = L->next;
L->next = p;
L->length++;
}
return L;
}
int insert(linklist L)
{
int n, x;
printf("请输入想插入的结点位置:\n");
scanf("%d", &n);
printf("请输入你想插入的数:\n");
scanf("%d", &x);
node* p;
p = (linklist)malloc(sizeof(node));
p = L;
int i = 1;
while (p&&i < n-1)
{
p = p->next;
i++;
}
if (!p||i >n - 1)
printf("无法插入!\n");
return 0;
node *r;
r = (linklist)malloc(sizeof(node));
r->data = x;
r->next = p->next;
p->next = r;
L->length++;
return 1;
}
int deletelist(linklist L)
{
int i;
printf("要删除第几个数字:");
scanf("%d", &i);
node* p, *q;
int j = 2;
p = L->next;
while (p->next && j < i)
{
p = p->next;
j++;
}
if (!p->next || j > i)
printf("第%d个数字不存在!",i);
q = p->next;
p->next = q->next;
free(q);
return 1;
}
void printlist(linklist L)
{
linklist p;
p = L;
while(p)
{
printf("%d", p->data);
p= p->next;
}
printf("\n");
}
int main()
{
int a;
linklist L;
L = (linklist)malloc(sizeof(node));
createlist(L);
while (1)
{
printf(" 请输入操作选项:\n");
printf(" 1插入;2删除;3查看\n");
scanf("%d", &a);
switch (a)
{
case 1:insert(L);
break;
case 2:deletelist(L);
break;
case 3:printlist(L);
break;
default:printf("输入错误,请重新输入!\n");
break;
}
}
return 0;
}
调试的时候
printlist函数里面
printf("%d", p->data); 会出现下面的显示:
引发了异常: 读取访问权限冲突。
p 是 0xFFFFFFFFFFFFFFFF。我不理解