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
那么如果用 delete作用在一个 new[]分配的指针上会怎么样呢?
debug版下会有assert,release版下会造成内存泄漏,因为调用free时指针非法会失败,但是不会崩溃。
作者:姚冬
链接:https://www.zhihu.com/question/25438329/answer/36990427
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。