今天给各位分享c语言free后的知识,其中也会对C语言free后报错进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、c语言中free函数释放内存后,该内存的里边的数据还有吗?
- 2、C语言free释放内存后为什么指针里的值不变?竟然还可以输出
- 3、C语言中free掉一段空间后为什么还要使用NULL
- 4、C语言,free(p)后,是否一定要再加一句p=NULL才算是内存释放完成了...
c语言中free函数释放内存后,该内存的里边的数据还有吗?
1、里面的数据可能存在,只要该内存没有被别的地方占用。你free释放的是内存的使用权。
2、理解正确,释放后的值当然还在那个位置,只是你再没有指针去指向它,也就无法操作它了。很多编译器中,如果对于刚刚free的内存,重新再访问,会发现里面的值没有发生变化。
3、会,但是也可能出现清空不彻底的情况,所以你可以使用内存清空函数,对内存进行清空。
4、是的,如果没有在这块内存中重新写入数据,这块内存中的数据是不会发生变化的。
5、free再次释放已释放的空间,不会有任何释放效果,因为free释放地址,是对地址作标记,表示该地址未被使用,可以再次用于分配。并不是说内存就消失了。(注意:1,free后原内存中的数据,不变或被重置。
C语言free释放内存后为什么指针里的值不变?竟然还可以输出
1、因为释放指针,只是将指针所指的内存空间交还给系统,而指针变量的内容(即刚释放的内存地址)并为改变,所以还能输出。但此时的指针一般称之为“野指针”,是很危险的。
2、next偏移struct test所占内存的“头(head)”距离较远,free的时候的一些设置值的操作没有影响到,能访问到这个指针的值,并且test0还在函数栈中完整保留,自然就能访问到了。
3、当调用 free() 的时候, 传入指针指向的内存被释放, 但调用函数的指针值可能保持不变, 因为 C 的按值传参语义意味着被调函数永远不会永久改变参数的值。
4、理解正确,释放后的值当然还在那个位置,只是你再没有指针去指向它,也就无法操作它了。很多编译器中,如果对于刚刚free的内存,重新再访问,会发现里面的值没有发生变化。
C语言中free掉一段空间后为什么还要使用NULL
因为操作系统默认这片堆地址可以随意使用。当其他程序刚好调用这个地址时,系统会毫不犹豫的把这地址分配给它。这就会导致很多问题。所以你释放后,一定要把指针指向空值。
所以为避免这种错误,一般将释放掉而又没重新赋值的指针赋值为空(NULL)使他不指向任何内存空间。
一般是free之后,再p=null 作用是不相同的 free 是告诉系统,这块空间我不同了,系统你可以把它分配给其他程序。
释放后指向随机地址。所以free后,如果没有新地址给指针变量,p就应该给空值NULL。否则就是“野指针”。
虽然这个指针仍指向这个内存,但是因为其被释放,很快会被其它malloc再分配到。值就会丢失,就是说内存不可靠了。在使用free后,一定要对p进行设置为NULL,或0以表示这个指针不再是有效的。要使用需要再申请内存。
C语言,free(p)后,是否一定要再加一句p=NULL才算是内存释放完成了...
你释放了,那个虚拟内存还在啊,就如同,你买了个房子,房子里放了沙发,沙发不用了,扔了,但是那个房子还在的嘛。。
因为free函数没有返回值,如果运行时没有报错,那么内存就可以认为是释放成功了。
指针free之后,free函数只是把指针指向的内存空间释放了,即内存中存储的值,但是并没有将指针的值赋为NULL,指针仍然指向这块内存。
free(p) 后P指向的那块地不再归你使用,里面的内容不一定变化,但是P还是指着那不动。单纯的p==NULL的话,P指向0,那块地还是归你使用,其他程序不得动用,但是你再也找不到那块地了,这就是内存泄露。
free后p指向的内存是释放状态。虽然这个指针仍指向这个内存,但是因为其被释放,很快会被其它malloc再分配到。值就会丢失,就是说内存不可靠了。在使用free后,一定要对p进行设置为NULL,或0以表示这个指针不再是有效的。
c语言free后的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于C语言free后报错、c语言free后的信息别忘了在本站进行查找喔。