我正在运行一个小程序以获得乐趣并遇到一个困扰我的问题。
#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
他们都在同一个记忆位置?
答案 0 :(得分:4)
打印地址后,您正在删除内存。然后内存管理器可以自由选择相同的地址来分配新内存。
答案 1 :(得分:1)
编译器以及操作系统(操作系统)决定分配给动态分配的内存的内存地址。调用delete时,不再引用指针指向的内存地址。因此,编译器可以自由地为新分配使用相同的内存地址。在这个级别的编程中,我们无法控制它。