0xC0000005: 写入位置 0x00000008 时发生访问冲突 求帮忙 创建链表 scan char类型就会这样

时间:2023-01-09 22:38:08
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>


struct student
{
int num;
int age;
char name[20];
struct student *next;
};

void insert_list(student *,int );
void delete_whole(student *);
void print_list(student *);
void delete_list(student *,int);

struct student *creat()
{
struct student * head;
struct student * p,* q;
int i=0;
p=q=(struct student *)malloc(sizeof(student));
scanf_s("%d,%d,%s",&p->num,&p->age,&p->name);
head=NULL;
while (p->num!=0)
{
i++;
if(i==1)
head=p;
else
q->next=p;
q=p;
p=(struct student *)malloc(sizeof(student));
scanf_s("%d,%d,%s",&p->num,&p->age,&p->name);
}
q->next=NULL;
return head;
}
int _tmain(int argc, _TCHAR* argv[])
{
struct student *head;
int n,x,i,b;
char temp;
printf("输入数据,输入0结束\n");
head=creat();
print_list(head);
printf("\n");
printf("\n下面进行链表插入\n");
printf("\n请输入即将插入节点的位置 i=");
scanf_s("%d",&i);
insert_list(head,i);
print_list(head);
printf("\n");
printf("\n下面进行链表删除元素\n");
printf("\n请输入即将删除元素的位置:i=");
scanf_s("%d",&i);
delete_list(head,i);
print_list(head);
printf("\n");
printf("\n是否删除整个链表?Y/N\n");
fflush(stdin);
scanf_s("%c",&temp);
if('Y'==temp) //删除链表
{
delete_whole(head);
printf("\n成功删除整个链表\n");
}
}



void insert_list(student *head,int i )
{
int j=0;
struct student *p,*s;
p=head;
while((p!=NULL)&&(j<i-1))
{
p=p->next;
j++;
}
if(p==NULL)  exit(0);
s=(struct student *)malloc(sizeof(student));
scanf_s("%d,%d,%s",&s->num,&s->age,&s->name);
s->next=p->next;
p->next=s;
}


void delete_list(student *head,int  i)
{
struct student *p,*q;
int j=0;
p=head;
while((p!=NULL)&&(j<i-1))
{
p=p->next;
j++;
}
q=p->next;
p->next=q->next;
free(q);
q=NULL;
}

void delete_whole(student *head)
{
struct student *p,*q;
p=head;
while(p!=NULL)
{
q=p->next;
free(p);
p=q;
}
}



void print_list(student * head)
{
struct student *p;
for(p=head->next;p!=NULL;)
{
printf("%d,%d,%s",p->num,p->age,p->name);
p=p->next;
}
}


17 个解决方案

#1


就是在第25行出问题

#2



scanf_s("%d,%d,%s",&p->num,&p->age,&p->name);//这句话你是咋输入的呢
//你要1,2,abcdef这样输入噢

#3


对啊 是这样输的

#4


凡是用到
scanf_s("%d,%d,%s",&p->num,&p->age,&p->name);
//都应该改为
scanf_s("%d,%d,%s",&p->num,&p->age,p->name);

#5


引用 4 楼 sundq12 的回复:
凡是用到
C/C++ code?123scanf_s("%d,%d,%s",&amp;p->num,&amp;p->age,&amp;p->name);//都应该改为scanf_s("%d,%d,%s",&amp;p->num,&amp;p->age,p->name);

没有用啊
scanf_s("%d,%d",&p->num,&p->age);//断点设在这
scanf_s("%s",p->name);//这就报错

#6


0x5336F6A4 (msvcr110d.dll) (ConsoleApplication1.exe 中)处的第一机会异常: 0xC0000005: 写入位置 0x0073D000 时发生访问冲突。

#7


name的长度超过20了没,还有,把你的输入界面截个图!

#8


还有,你查一下&和->的优先级,是在搞不清楚的话就加括号。

#9


0xC0000005: 写入位置 0x00000008 时发生访问冲突 求帮忙 创建链表 scan char类型就会这样
0xC0000005: 写入位置 0x00000008 时发生访问冲突 求帮忙 创建链表 scan char类型就会这样
0xC0000005: 写入位置 0x00000008 时发生访问冲突 求帮忙 创建链表 scan char类型就会这样

#10


引用 8 楼 sundq12 的回复:
还有,你查一下&amp;和->的优先级,是在搞不清楚的话就加括号。

加括号没用 &去掉也木用。。

#11


p=q=(struct student *)malloc(sizeof(student));
//你打印一下sizeof(student)是多少,我觉得这样不行,应该是
p=q=(struct student *)malloc(sizeof(struct student));

#12


p=q=(struct student *)malloc(sizeof(struct student));
这样也不行。。就是scan到char倒。。

#13


在调用时,必须提供一个数字以表明最多读取多少位字符。

scanf_s("%d,%d,%s",&p->num,&p->age,p->name, 20);

#14


just googled scanf_s, upstairs is right!!

#15


崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

#16


引用 13 楼 derekrose 的回复:
在调用时,必须提供一个数字以表明最多读取多少位字符。

scanf_s("%d,%d,%s",&amp;p->num,&amp;p->age,p->name, 20);

+

#17


这么久了,不知道楼主还在不在,我也遇到了你这样的问题,不知道是怎么解决的

#1


就是在第25行出问题

#2



scanf_s("%d,%d,%s",&p->num,&p->age,&p->name);//这句话你是咋输入的呢
//你要1,2,abcdef这样输入噢

#3


对啊 是这样输的

#4


凡是用到
scanf_s("%d,%d,%s",&p->num,&p->age,&p->name);
//都应该改为
scanf_s("%d,%d,%s",&p->num,&p->age,p->name);

#5


引用 4 楼 sundq12 的回复:
凡是用到
C/C++ code?123scanf_s("%d,%d,%s",&amp;p->num,&amp;p->age,&amp;p->name);//都应该改为scanf_s("%d,%d,%s",&amp;p->num,&amp;p->age,p->name);

没有用啊
scanf_s("%d,%d",&p->num,&p->age);//断点设在这
scanf_s("%s",p->name);//这就报错

#6


0x5336F6A4 (msvcr110d.dll) (ConsoleApplication1.exe 中)处的第一机会异常: 0xC0000005: 写入位置 0x0073D000 时发生访问冲突。

#7


name的长度超过20了没,还有,把你的输入界面截个图!

#8


还有,你查一下&和->的优先级,是在搞不清楚的话就加括号。

#9


0xC0000005: 写入位置 0x00000008 时发生访问冲突 求帮忙 创建链表 scan char类型就会这样
0xC0000005: 写入位置 0x00000008 时发生访问冲突 求帮忙 创建链表 scan char类型就会这样
0xC0000005: 写入位置 0x00000008 时发生访问冲突 求帮忙 创建链表 scan char类型就会这样

#10


引用 8 楼 sundq12 的回复:
还有,你查一下&amp;和->的优先级,是在搞不清楚的话就加括号。

加括号没用 &去掉也木用。。

#11


p=q=(struct student *)malloc(sizeof(student));
//你打印一下sizeof(student)是多少,我觉得这样不行,应该是
p=q=(struct student *)malloc(sizeof(struct student));

#12


p=q=(struct student *)malloc(sizeof(struct student));
这样也不行。。就是scan到char倒。。

#13


在调用时,必须提供一个数字以表明最多读取多少位字符。

scanf_s("%d,%d,%s",&p->num,&p->age,p->name, 20);

#14


just googled scanf_s, upstairs is right!!

#15


崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

#16


引用 13 楼 derekrose 的回复:
在调用时,必须提供一个数字以表明最多读取多少位字符。

scanf_s("%d,%d,%s",&amp;p->num,&amp;p->age,p->name, 20);

+

#17


这么久了,不知道楼主还在不在,我也遇到了你这样的问题,不知道是怎么解决的