2 leoe LEoe_ 于 2016.04.13 11:58 提问

c++读取文件中的链表存取问题 5C

这是一个读取文件中的链表,然后再存进新的链表为本次操作所使用,但是在存到新链表中
,画红线的p2->next=p1;的时候就会报错。这是一个双向链表,图片说明图片说明

5个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.13 12:42

next和prece指针的写法并没有错
感觉是你的fread有问题,应该是fread((&p1, sizeof(Doctor), 1, fp)) != EOF
你sizeof一个指针,永远是4

qq423399099
qq423399099 回复LEoe_: 改成fread((p1, sizeof(Doctor), 1, fp)) != EOF试试,p1本来就是指针了,用不着取地址,我猜应该就是这里的原因
一年多之前 回复
LEoe_
LEoe_ 额,这个改了,我修改的半天,确定就是划红线的地方有问题
一年多之前 回复
LEoe_
LEoe_ 额,这个改了,我修改的半天,确定就是划红线的地方有问题
一年多之前 回复
tusong86
tusong86   2016.04.13 12:55

1.首先fread的用法有问题吧,fread一般就读取字符串,你那个Doctor的结构是什么样的,也是需要看的
2.fread((&p1, sizeof(Doctor), 1, fp)) != EOF
这句话要改成.fread((p1, sizeof(Doctor), 1, fp)) != EOF
你试试看

LEoe_
LEoe_ 额,这个改了,我修改的半天,确定就是划红线的地方有问题
一年多之前 回复
CSDNXIAOD
CSDNXIAOD   2016.04.13 12:02

一个c++读取.ini文件问题
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

qq_31597573
qq_31597573   2016.04.13 14:23

问题应该出在fread((p1, sizeof(Doctor), 1, fp)) != EOF和p2=p1,你txt文件中一个数据项大小应该等于sizeof(Doctor).

webcqsec
webcqsec   2016.04.20 17:00

不知道 Doctor 结构的定义是怎样的,除了 next 成员外应该还有专门存储数据的成员(如 data),所以应使用 fread(&(p1->data),sizeof(p1->data),1,fp) 的方式读取数据。

而使用 fread(&p1,sizeof(p1),1,fp) 的方式读取数据,实际是将数据读入了 p1 指针之中,导致 p1 不再指向原来的 new Doctor 对象,所以再次访问 p1 所指向的内存时导致内存访问异常。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!