我在一个函数里开辟了一个空间,然后用指针b指向这段空间,再返回给main函数,用指针b接收,再让指针c也指向这段空间,然后我释放了b指向的这段空间(那不也是c指向的空间吗?)为什么释放后,c还能去操作这段空间。(delete不是释放new开辟的空间吗?要是空间被释放了,那所有指向这段空间的指针不是应该都不能再操作这段空间了吗?)
在我理解中,delete是释放一个空间,不管多少个指针指向,只要以其中一个指针为载体,释放这空间后,其他指向这空间的指针就没有权限操作这空间了。
delete只是通知系统释放内存,但内存仍然是可以读写的,释放的内存允许其他new或者函数调用申请使用,你如果在其中进行操作,可能会干扰到申请使用者
即使没有申请,有些内存你是可以操作的,只是后果不明而已,因此指针使用规则就是,自己申请的,就在自己申请的范围内使用,系统不会为你判断是否越界使用的,一切后果自行承担
你没有理解指针和内存的关系,你在程序退出的时候应该会遇到堆损坏的告警。
new出来的那个指针在堆上开辟了一块内存,这块内存会被这个指针占用,其它新new出来的指针不会再利用这块内存,这个时候你用另一个指针指向它,即两个指针指向了堆上的同一块内存,这个时候实际上delete就会宣告指针对这块内存的独占结束了,这块内存现在可能会被新new出来的指针占用。
但是,记住!delete只是解除了new出来的指针对它指向内存的占用,而不是删除指针或者这块内存,delete之后指针仍然存在,仍然指向这一块内存。
你仍然能赋值和读取,但是在程序退出时,程序析构函数会析构到被放弃占用的内存上面(你赋值的时候动态指针就变成了不安全的静态指针,之所以不安全是因为系统不会维护这块内存了,这块内存随时会被其它成员占用),并且程序不能操作堆内存,这会造成堆损坏问题
但是我这 用C赋值了,还输出了,我试了很多了,撩了很多次,都可以
追答不出现悬挂指针,不使用自己没有申请到的内存是程序安全的基本保证,渣男没挨打是因为没被性病制裁过,以后写代码不能这么干,工程项目中这么干一定会被申请把你调离,给同事埋雷。