C++ C++;新操作员分配新内存
我为了好玩而运行一个小程序,遇到了一个困扰我的问题C++ C++;新操作员分配新内存,c++,dynamic-memory-allocation,C++,Dynamic Memory Allocation,我为了好玩而运行一个小程序,遇到了一个困扰我的问题 #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; de
#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;
}
它们都在同一个内存位置?您正在打印地址后删除内存。然后内存管理器可以自由选择相同的地址来分配新内存。编译器与操作系统一起决定将哪个内存地址分配给动态分配的内存。调用delete时,指针指向的内存地址不再被引用。因此,编译器可以自由地将相同的内存地址用于新分配。这不是我们在这个编程级别可以控制的东西。是的,在这种情况下,它们都在同一个位置。你的程序所做的就是对同一个对象重复使用同一个内存(为什么不重复使用;每次
删除后,如果内存管理器认为合适,它将不再被使用,并且可以用于另一个分配,在本例中,它确实如此)。编译器没有这么多。当程序运行并请求动态存储时,编译器的工作早已结束。
0x16b76d0
0x16b76d0
0x16b76d0