您的位置:首页 > 编程语言 > C语言/C++

C++中为什么有delete[]这种写法?

2017-07-10 08:40 176 查看
https://www.zhihu.com/people/yao-dong-27/answers?page=19

以 VC++ 2008 举例,如果执行以下代码

Foo *p = new Foo[10];
int n = *((int*)p - 1);


猜猜 n 的值是多少?是 10

编译器在使用new[]分配内存的时候在返回的内存块里放了一个 数组的 size

而用 new 分配的时候则不会

在使用 delete 的时候,生成的代码最后是用 p 去调用free

而是用 delete[]的时候,生成的代码是 用 p - 4(按字节减) 去调用free

但是编译器无法分辨给出的 *p 到底是指向数组还是指向单个对象,所以需要开发者自己指定。

那么如果用 delete作用在一个 new[]分配的指针上会怎么样呢?

debug版下会有assert,release版下会造成内存泄漏,因为调用free时指针非法会失败,但是不会崩溃。

作者:姚冬

链接:https://www.zhihu.com/question/25438329/answer/36990427

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: