首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

new[]分配的内存,却用delete(没有[])释放的有关问题

2012-06-03 
new[]分配的内存,却用delete(没有[])释放的问题RT,在 C++ primer plus 中,有这么一句话(P97):“如果使用new

new[]分配的内存,却用delete(没有[])释放的问题
RT,在 C++ primer plus 中,有这么一句话(P97):
“如果使用new[]为一个实体分配内存,则应使用delete(没有方括号)来释放。”
里面所指的实体是什么?有什么谁能举个实际例子?

[解决办法]
比如AClass是一个类:
AClass* aClass = new AClass[10];
delete[] aClass;

实体指的就是aClass这个数组。
[解决办法]
char析构函数啥事都不干,但这样delete m_data是未定义行为,不建议这样用
因为标准没规定new[]的能用delete释放,它们可能用不一样的分配算法,在不同的位置分配
[解决办法]

探讨

实体(entity)是C++的基本概念之一。一个实体是变量、对象、函数、引用、类型、类、模板、……、this。
这里的实体是指对象。

[解决办法]
你 new的是什么 delete 的也将是什么 比如说你new的是一个数组那么你delete 的时候也是这个数组而不可能是其中某一些数组元素 使用new 的时候系统会在堆上面给你分配你需要的空间 同时系统内存管理机制中 的 内存记录表 会记录这块空间 不允许其他程序访问 当你使用delete 的时候 系统会在内存记录表中间把这笔记录删掉 这样其他程序也能访问这块空间了也就是这块空间被释放了 但是这块空间原有的数据还在 所以说你delete 完之后 还要将指向这块空间的指针指向 NULL 否者引起内存泄漏····
[解决办法]
这句明显是写错了,多写了个[],或许是排版的时候没校对出来。
这一章节仔细阅读并理解的话,能发现其他地方都是说的new用delete,new[]用delete[]

热点排行