使用std :: addressof存储指针地址

时间:2014-12-04 12:33:33

标签: c++ pointers c++11

我可能在这里遗漏了一些东西。我需要存储新分配的内存块的指针地址。

我这样做:

    void* buffer = _aligned_malloc(4096,4);
    assert(buffer);
    //save its original address:
    void* initialAddress = (void*) std::addressof(buffer );

initialAddress的地址与缓冲区的地址不同。

只有当我分配缓冲区指针时,我才能获得相同的地址(这当然是正确的事情):

    initialAddress = buffer;

那么,为什么std :: addressof(缓冲区)显示不同的地址?我正在使用VS2012进行调试。可能是指针的地址而不是缓冲区的地址?

2 个答案:

答案 0 :(得分:5)

  

可能是指针的地址而不是缓冲区的地址?

就是这样。执行std::addressof(buffer)与执行&buffer相同(但它们有时可能意味着不同的事情),因此您只需获取buffer指针的地址,即void** }。如果您只想要buffer的副本,请执行initialAddress = buffer;

答案 1 :(得分:2)

您正在比较buffer指向的地址和buffer本身的地址。他们是不同的。