两个指针指向的是什么同一个new开辟的空间,当释放其中一个指针后,为什么另一个指针还能操作这个空间?

有时为了逻辑实现的方便在程序中会采用多指针指向的是什么同一块内存的设计,但是这同时会带来问题:

问题1:容易引发“野指针”错误!即其中一个指针delete了内存之後其他指针无法判断该指向地址是否还有效,如果也去delete这时自然会导致错误。

解决方案:严格遵照 谁申请谁释放 的原则!

问题2:即使遵守谁申请谁释放的原则,其他指针还是无法有效置为null因为你无法判断它是否还有效,只能不去管它这就是“悬垂指针”。

解决方案:可以去维护一个指针计数类该块内存的有效指针数量大于1之前,绝不在任何指针上进行释放操作当有效指针为零时,将全部指针置为null

}
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明
 这是在学习指针的时候遇到的一个小问题: 释放掉指针P所指向的内存空间,继续读取指針P的值会报什么错,直接贴代码
  代码很简单,其实对于结果我们也都清楚,简单提一下.开始定义一个int型的指针,此时指针指向的是什么了地址为004E4F20的內存空间,但由于delete p以后,此时这块内存空间就被释放出来了,这时指针P读取的值为-.等于告诉编译器可以用该内存区域保存其他数据.
 此时指针仍指姠这块内存地址,只不过指针P不能在访问它了,这时调试会提示发生访问冲突.跟我们平常理解的冲突有点区别,或许这就是电脑思想吧,说不定他准备留着这块内存给别的任务使用.你既然不能访问,只能说你冲突了

发布了54 篇原创文章 · 获赞 64 · 访问量 8万+

}

我要回帖

更多关于 指针指向 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信