我正在运行一个很小的程序来娱乐,并遇到了困扰我的问题。
#include <iostream>
#include <string>
using namespace std;
struct T
{
int val;
};
int main()
{
for(int i = 0; i < 2; ++i)
{
T *p = new T;
cout << p << endl;
delete p;
}
T *q = new T;
cout << q << endl;
delete q;
return 0;
}
输出:
0x16b76d0
0x16b76d0
0x16b76d0
他们都在同一内存位置?
打印地址后,您将删除内存。然后,内存管理器可以免费选择相同的地址来分配新的内存。
编译器以及您的 OS(操作系统(决定哪个内存地址分配给您的动态分配的内存。调用删除时,指向指向的内存地址不再引用。因此,编译器可以为您的新分配使用相同的内存地址。这不是我们在这个编程级别上控制的东西。