关于C++指针的deIete理解

五迷三道 提交于 2019-12-14 16:09:09

关于c++指针的deIete理解

附∶①函数内的指针是局部变量,由编译器分配栈区空间(由cout<<&p可知p指针有空间地址,占用size字节长度由类型决定),函数结束时自动释放空间。
②用new运算符等操作分配给指针的堆区空间(如:int*p=new int [n])只能人为分配(new等),并用指针协助分配(只能人为,只能用指针),并且不会自动释放,需要用deIete运算符等人为释放空间。
③已定义的变量名(如int n中的n)对应的地址再次编译都会改变(包括指针变量p地址及指针对应的堆区空间地址都如此,之所以对应的堆区空间地址也改变是因为再次编译后指针p的空间地址改变,编译到new运算符处时又给p赋一个新的堆区地址),可运行后输出地址后发现(这与内存泄露有关)
正文开始:
为什么delete []p后要给指针p赋成NULL?
首先我们要知道deIete []p的原理:delete的作用是更换p空间中存的地址值(把对应的堆区地址值换为另一个地址(栈区地址?),以此来切断两个空间的联系,并非删去两个空间,之后,p中仍有地址,变成了野指针,会对接下来写的代码有危害,而赋NULL之后,p中地址值更换为0,这样就不会对下面代码有影响了。
所以delete后要赋NULL

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!