曾想过delete操作符是如何知道要删除的内存块的大小而避免内存泄露的。是否有一个类似'\0'的符号来标识内存块的结束。
后来,查到new操作符会在新分配的内存块前面4个字节储存内存块的大小。也就是说,new 操作符实际开辟的内存比你之前以为的要多4个字节。
测试一下,下面的代码输出结果为 400
#include <iostream>
using namespace std;
int main()
{
<span style="white-space:pre"> </span>int *p = new int[100];
<span style="white-space:pre"> </span>cout << *(p -4) << endl;
<span style="white-space:pre"> </span>delete p;
}
<span style="white-space:pre"> </span>