delete [] p使用要慎重!

指针通过 new new[] ,向系统“申请”得到一段内存空间,我们说过,这段内存空间必须在不需要将它释放了。有点像人类社会的终极目标“共产主义”下的“按需分配”。需要了就申请,不需要了,则主动归还。

 

现在问题就在于这个“主动归还”。当然,指针并不存在什么思想觉悟方面的问题,说光想申请不想归还。真正的问题是,指针在某些方面的表现似乎有些像“花心大萝卜”。请看下面代码,演示令人心酸的一幕。

 

/*

  初始化 p  ----- p 的新婚

  通过 new ,将一段新建的内存“嫁给”指针p

  这一段分配的内存,就是p的原配夫妻

*/

int* p = new int[100]; 

 

 

/*

   使用 p  ----- 恩爱相处

   N 多年恩爱相处,此处略去不表

*/

……

 

/*

   p 改变指向 ---- 分手

*/

 

int girl [100];   //第三者出现

p = girl;         //p 就这样指向 girl

 

 

/*

   delete [] p ----  落幕前的灾难 

 

   终于有一天,p老了,上帝选择在这一时刻

   惩罚他

*/

 

delete [] p;

 

扣除注释,上面只有4行代码。这4行代码完全符合程序世界的宪法:语法。也就是说对它们进行编译,编译器会认为它们毫无错误,轻松放行。

 

但在灾难在 delete [] p 时发生。

我们原意是要释放 p 最初通过 new int[100]而得到的内存空间,但事实上,p那时已经指向girl[100]了。结果,第一、最初的空间并没有被释放。第二、girl[100] 本由系统自行释放,现在我们却要强行释放它。

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值