C语言结构体内的指针问题

我在学C语言的基础视频.但是讲到结构体内的指针有一段视频没有了,上一段视频结束的时候说了是要讲的内容,请哪位老师给我讲解下将free(st.name)提前到printf前... 我在学C语言的基础视频.但是讲到结构体内的指针有一段视频没有了,上一段视频结束的时候说了是要讲的内容,请哪位老师给我讲解下 将 free(st.name) 提前到printf前面 ,输出st1.name就是一串乱码. 谢谢了,这样我也就间接的学到那篇没有的视频了. 展开
 我来答
White_MouseYBZ
2018-07-26 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6528万
展开全部
这个问题很直观。当struct student_a st1=st;时只将结构体变量st中的指针name拷贝到了st1中的指针变量name,就是说只使st1.name和st.name同时指针了由st.name=malloc(100);动态分配的片区,并没有重新再为st1.name分配100个字节。你可以这样考虑:1.如果由malloc分配的堆片区可以再复制,那怎么释放?2.你可以用sizeof(st1)测试一下看看有没有那100个字节(其实st中也没有那100个字节)。malloc分配的片区在堆里放着,只是让某个指针指向了它。那么,你在printf前free了它,它就可能被系统重新分配,所以输出就乱了……
捣蒜大师Edison
2018-07-26 · TA获得超过2963个赞
知道大有可为答主
回答量:3825
采纳率:77%
帮助的人:1320万
展开全部
free是释放内存的意思。
你把s1.name分配的内存释放了,变成野指针了,就不能再访问它了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式