我们曾经不止一次的在很多地方甚至教课书上看到过以下关于delete和delete[]的说法(主要看红字部分。。回想一下大学老师是不是这么教你的。。。。):
此图片来源:http://www.cnblogs.com/bizhu/archive/2012/09/09/2677830.html
然而。。现实是很残酷的。。。我可以很肯定的告诉你,以上的说法是完全错误的!只能说我们被教科书坑了好多年。。。。。
在上文中曾提到过,当动态申请内存的时候,系统会记录分配的内存首地址和整块内存大小。此信息保存在CrtMemBlockHeader中,具体可以参考VC目录下CRT\SRC\DBGDEL.cpp。当我们释放内存的时候,系统会根据你给出的内存首地址(指针)来找到当时分配的内存大小,并释放这块区域。
也就是说
int* p = new int[10];
delete p; 完全等价于 delete[]