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

我在学C语言的基础视频.但是讲到结构体内的指针有一段视频没有了,上一段视频结束的时候说了是要讲的内容,请哪位老师给我讲解下 将 free(st.name) 提前到printf前面 ,输出st1.name就是一串乱码. 谢谢了,这样我也就间接的学到那篇没有的视频了.

这个问题很直观。当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了它,它就可能被系统重新分配,所以输出就乱了……
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-07-26
free是释放内存的意思。
你把s1.name分配的内存释放了,变成野指针了,就不能再访问它了。
相似回答