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