中易网

c语言链表空间分配的问题,邀请诸位高手共析~

答案:3  悬赏:40  
解决时间 2021-01-24 13:39
c语言链表空间分配的问题,邀请诸位高手共析~
最佳答案
s=(pNode)malloc(sizeof(pNode))只申请了一个指针空间。故而后面free(s),因为找不到s指向的Node节点空间。而报错。
申请一个pNode的空间,返回一个pNode型指针s,。s->next = s是指针s的强制性操作未知空间(指针是C的精华,也是缺点。)。也就是操作了s指向空间(开始的前四个为data,后四个为next.实际上,系统不认可,所以释放报错)。你可以强制性输出s里面的内容看看。
printf("data:[%d] next:[%p]\n",s->data,s->next);
不知道说明白了没有。不明白可以追问。追问是的,只申请了一个Node型指针的空间,按理说我在给s->data赋值的时候,如s->data = 2;不是已经相当于强行占用了内存吗,因为原本根本没有空间存放s-data,也就是这个2,但是为什么创建时,强行占用内存不报错,释放时才报错呢?鄙人愚钝,望不吝赐教。谢谢~追答你申请了一个Node型指针空间(4个字节),返回了pNode指针s。也就是pNode指针s所指向的空间地址开始,长度为4个字节。是s可以正确操作的空间,s->data就放在了那四个空间里面。没有强占内存。
接着p->next = s; //把pNode型指针s赋值给p->next。
p = p->next;//看起来没问题。但实际上s中没申请出next的空间,你后面接着构建链表。p->next = s;就是指针p强行访问了没有权限的空间(也就是访问了没申请出来的next空间,即p->next = s)。但是构建出来的是错误的链表。当你free时,系统就从s指向的空间开始。长度为sizeof(Node),欲将其释放,所以释放了没malloc的空间而报错。
指针是程序里面一个特殊的存在,可以强行操作内存。是好处也是坏处。容易出现段错误。
全部回答
s=(pNode)malloc(sizeof(pNode)) 这一句只申请一块存放指向struct指针的内存,逻辑上错误,
至於 s->data为什麽有意义。因为这个指针是类型是Node。
我这边用的VC6 运行正常

please intput the data
11
please intput the data
33
please intput the data
44
please intput the data
55
please intput the data
66
please intput the data
77
please intput the data
0
the Linklist is : 11 33 44 55 66 77
the Linklist is : 77 66 55 44 33 11
wait to delete the number needed……
the Linklist is : 77 66 44 33 11 Press any key to cont
inue
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
艾妃儿美容美体养生馆地址在什么地方,我要处
爱至成伤是什么意思?
女性中长发!头发稀少秃顶怎么办
2018MWC爱立信上海展台将围绕什么主题展开?
63的液压泵带动45的马达为什么一费劲就不转了
坤隆石油地址在什么地方,想过去办事
手心痒是怎么回事还红红的
求点百合番。。最好没男主。。
上海的朋友求推荐酒店,以及旅游的部分
到菲律宾旅游要多少钱
加装了固态硬盘该怎么把系统 移植到固态硬盘
谁用过极限金刚这种健美补剂?
2)某一天该同学上街, 恰好赶上商家促销, 超市
成都火北站到崇州五治学校怎么坐车
韩国伤感经典歌曲叫什么名字
推荐资讯
复变函数的共形映射问题
某内存储器中恰好能够存储gb2312-80中的所有
现在的函授文凭有用吗???
中国1956年前是什么经济模式
以王明的名义给好友张斌写一封信,祝贺他晋升
旧房装饰装修步骤谁能详细介绍一下?
如何成为一个优秀的股市操盘手
9月底适合到厦门鼓浪屿旅游吗
《世有薜荔》白虎篇攻略
欧式台灯介绍及选购原则
阵发性室上性心动过速伴发房颤的典型心电图表
唇颚裂牙齿长歪了还缺一颗,能治好吗
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?