【求助】关于指针与内存问题

smallear1231 2013-03-22 02:21:34
那你看我这样表达对不:1.有一个指针指向一块堆空间,当我delete这个指针的时候,释放掉这片内存,虽然释放掉了这块内存,但指针还在,所以指针还指向这块已经被释放了的内存,只不过告诉编译器,这块内存你可以拿去用,如果我再对这个指针赋值,就意味着这个值依然存放在那块曾经释放了的堆空间
2.假如有两个对象a和b,a里有个成员变量是指针p,而p现在指向一块存放了一个6的空间,然后把a通过复制构造函数给了b,也就把成员变量指针p给了对象b,此时,对象b也拥有了一个指针,而这块指针也是指向了那个存放了6的空间,现在我把a对象的指针delete,也就是把a对象的指针所指向的空间给释放掉了,那a对象的指针指向的地址里面存放的还是6吗?a对象指针被delete后,那b对象的指针会受什麽影响?b的指针还指向那块空间吗?那块空间里的值还是6吗?
...全文
161 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
_sunshine 2013-03-22
  • 打赏
  • 举报
回复
释放时是将这段内存标记为可再分配,但是里面的数据有可能没有被清空,所以如果你用另一个指针再次调用还能够识别出刚刚的数据,但存在很大的危险性,建议释放时2个指针都指向NULL
_sunshine 2013-03-22
  • 打赏
  • 举报
回复
楼主,上一贴的第二问我答错了。 应该是这样的,你现在a和b中的指针都是指向了一块内存,你把a对象的指针进行delete操作以后,会释放掉该内存,而同时b的指针还指向该内存,这种行为是未定义的,运行时会报错
smallear1231 2013-03-22
  • 打赏
  • 举报
回复
引用 2 楼 chuachua66 的回复:
1、再对这个指针赋值,则这个指针指向一块新的内存空间,不一定是堆,也可以是栈啊。 2、不是;b里指针变野指针;b指针还指向那块空间;空间的值未定义,不一定;
指针所指向空间是被释放了,但在没有新值代替这块内存的6的时候,里面的值应该不会被改变吧
smallear1231 2013-03-22
  • 打赏
  • 举报
回复
引用 1 楼 dy106 的回复:
参考上一贴的回答
第一问题可以参考上一个帖子,那第二个问题的前半部分和第一个问题一样,后半部分就是新问题了
chuachua66 2013-03-22
  • 打赏
  • 举报
回复
1、再对这个指针赋值,则这个指针指向一块新的内存空间,不一定是堆,也可以是栈啊。 2、不是;b里指针变野指针;b指针还指向那块空间;空间的值未定义,不一定;
_sunshine 2013-03-22
  • 打赏
  • 举报
回复
参考上一贴的回答

64,680

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧