delete [] p使用要慎重!

来源:互联网 发布:英文版办公软件 编辑:程序博客网 时间:2024/06/09 18:08

指针通过 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] 本由系统自行释放,现在我们却要强行释放它。

  

原创粉丝点击