C ++ new运算符分配新内存

时间:2017-04-16 03:17:57

标签: 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;
        delete p;
    }

    T *q = new T;
    cout << q << endl;
    delete q;

    return 0;
}

输出:

0x16b76d0
0x16b76d0
0x16b76d0

他们都在同一个记忆位置?

2 个答案:

答案 0 :(得分:4)

打印地址后,您正在删除内存。然后内存管理器可以自由选择相同的地址来分配新内存。

答案 1 :(得分:1)

编译器以及操作系统(操作系统)决定分配给动态分配的内存的内存地址。调用delete时,不再引用指针指向的内存地址。因此,编译器可以自由地为新分配使用相同的内存地址。在这个级别的编程中,我们无法控制它。