C 新操作员分配新内存



我正在运行一个很小的程序来娱乐,并遇到了困扰我的问题。

#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(操作系统(决定哪个内存地址分配给您的动态分配的内存。调用删除时,指向指向的内存地址不再引用。因此,编译器可以为您的新分配使用相同的内存地址。这不是我们在这个编程级别上控制的东西。

最新更新