C++中为什么有delete[]这种写法?
2017-07-10 08:40
176 查看
https://www.zhihu.com/people/yao-dong-27/answers?page=19
以 VC++ 2008 举例,如果执行以下代码
猜猜 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
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
以 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
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章推荐
- C++中有了malloc/free,为什么还要用new/delete
- C++中有了malloc/free,为什么还需要new/delete
- C++中有了malloc/free,为什么还需要new/delete?
- C++ 为什么要同时使用*和&符号?以及什么场合使用这种声明方式?
- 知识普及之:CSS: body{font-size: 62.5%;}这种写法为什么???
- C++中有个malloc/free,为什么还需要new/delete?
- C++中有了malloc/free 为什么还要new/delete
- "aa".equals(a)这种写法为什么就可以避免空指针。
- 高质量c++(有了malloc/free 为什么还要new/delete )
- C++中有了malloc/free 为什么还要new/delete?
- C++中有了malloc/free 为什么还要new/delete
- C++为什么不用delete代替delete[]?
- C++中为什么new和delete更好用
- C++ 宏 为什么建议 do while (0) 的写法
- C++通过基类指针delete派生类数组,析构函数是虚函数,程序为什么会崩溃? https://www.zhihu.com/question/30838092/answer/49623765
- C++中有了malloc/free 为什么还要new/delete
- 面试题:C++有了malloc/free,为什么还需要new、delete?
- C++中有了malloc/free,为什么还需要new/delete?
- c++ 内存管理:7、有了malloc/free为什么还要new/delete?
- 高质量c++(有了malloc/free 为什么还要new/delete )