C语言结构体内的指针问题
我在学C语言的基础视频.但是讲到结构体内的指针有一段视频没有了,上一段视频结束的时候说了是要讲的内容,请哪位老师给我讲解下将free(st.name)提前到printf前...
我在学C语言的基础视频.但是讲到结构体内的指针有一段视频没有了,上一段视频结束的时候说了是要讲的内容,请哪位老师给我讲解下 将 free(st.name) 提前到printf前面 ,输出st1.name就是一串乱码. 谢谢了,这样我也就间接的学到那篇没有的视频了.
展开
2个回答
展开全部
这个问题很直观。当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了它,它就可能被系统重新分配,所以输出就乱了……
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询