想到一个内存申请和释放的比喻

千树之影 2013-11-14 11:16:46
希望能让看了这个帖子的人不要再问“内存释放了为什么还能使用”类似问题了。

int* p=new int[10]; //你向房东租了间房子,房东给你一把钥匙p
p[0]=1234; //你开始使用这间房子,扔了一堆你的东西
delete[] p; //你向房东退房了
//p=NULL; //你把钥匙还了,如果没有这句就是你没还钥匙
cout <<p[0]; //你明明退了房子,但没有还钥匙。然后还用这把钥匙开门进去。
//这时有三种结果:(1)房子还是老样子,你扔的东西都还在,就像你没退房一样
// (2) 房子已经被房东收拾过了,你的东西被扔掉了。
// (3) 房子已经被租给其他人了,你被当做小偷暴打了一顿。
最后,请记住:退房记得还钥匙。
...全文
98 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2013-11-14
  • 打赏
  • 举报
回复
引用 楼主 baipv008 的回复:
希望能让看了这个帖子的人不要再问“内存释放了为什么还能使用”类似问题了。 int* p=new int[10]; //你向房东租了间房子,房东给你一把钥匙,放在钥匙盒子p里面。 p[0]=1234; //你开始使用这间房子,扔了一堆你的东西(从盒里取出钥匙,开门,存放东西) delete[] p; //你向房东退房了,不再拥有使用的权利了。 //p=NULL; //你把钥匙还了(钥匙盒子是空的了),如果没有这句,就是你没还钥匙,在你的钥匙盒子里呢。 cout <<p[0]; //你明明退了房子,但没有还钥匙。然后还用这把钥匙开门进去。 //这时有三种结果:(1)房子还是老样子,你扔的东西都还在,就像你没退房一样 // (2) 房子已经被房东收拾过了,你的东西被扔掉了。 // (3) 房子已经被租给其他人了,你被当做小偷暴打了一顿。 最后,请记住:退房记得还钥匙。 还要记住,没有钥匙,拿个空钥匙盒子,不要随便乱开人家的门,别因为你住过这房子,就老想着破门而入,或者看到房门就想开。
PS: 给楼主修改一下,空指针还是不很贴切。 一切比喻都是蹩脚的,就这样吧!
lm_whales 2013-11-14
  • 打赏
  • 举报
回复
应该加一句有 p = NULL; cout <<p[0]; 4)没有钥匙,破门而入,你被当做强盗,暴打了一顿,小命都要完了; 人家是正当防卫,到衙门告状,也是你理屈,被杀都是活该。 PS: p = NULL ; 的作用,是可以判断,指针是否合法,而不是允许访问。 如果没有这句,无法判断指针是否合法。 那么,唯一的办法,就是从此不再理会这个指针,或者为这个指针,重新分配一段内存。 其实指针比作钥匙,有点不妥,因为指针的值才是钥匙,你依靠指针的值访问数据; 指针只是盛放钥匙的盒子。 指针本身,只是用来存放这个值。
dyw 2013-11-14
  • 打赏
  • 举报
回复
退了房,钥匙不还也是废的。
max_min_ 2013-11-14
  • 打赏
  • 举报
回复
RabinSong 2013-11-14
  • 打赏
  • 举报
回复
比喻的很贴切
mujiok2003 2013-11-14
  • 打赏
  • 举报
回复

64,682

社区成员

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

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