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

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
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值