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] 本由系统自行释放,现在我们却要强行释放它。
- delete [] p使用要慎重!
- 使用Service要慎重
- 晕,hibernate 的 merge和cascade="all-delete-orphan"要慎重合在一起使用
- CList, CArray使用要慎重
- 慎重使用SetRenderState
- 慎重使用volatile关键字
- SetThreadAffinityMask 函数使用慎重
- 慎重使用volatile关键字
- scanf()函数慎重使用
- 慎重使用全局变量
- delete p和delete[] p的区别
- delete p 和delete []p的区别
- delete p和delete[] p的区别
- delete p和delete[] p的区别
- delete p与delete p[]的区别
- delete p和delete[] p的区别
- delete p和delete[] p的区别
- 慎重
- 安装,启动与卸载Mysql系统服务
- The Sound Of Silence
- RSS 学习心得
- [活动召集]福建PHP社区聚会
- 我的午饭
- delete [] p使用要慎重!
- 关于个人电脑安全详细的设置方法
- 用hibernate-extensions自动生成POJO对象
- 《关于个人承接项目的注意事项》
- 9月15日 日记
- 关于23种设计模式的有趣见解
- MySQL索引分析和优化
- 病毒木马入侵招数大曝光
- 用非常规手段有效删除Windows怪文件