2014-12-04 68 views
0

我可能在这里丢失了一些东西。我需要存储新分配的内存块的指针地址。存储指针地址和std :: adressof

我这样做:

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

的initialAddress持有多缓冲区的不同地址。

只有当我分配缓冲区指针我收到相同的地址(这当然是发生正确的事):

initialAddress = buffer; 

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

回答

5

也许这是指针的地址而不是缓冲区的地址?

就是这样。做std::addressof(buffer)和做&buffer是一样的(但它们有时可能意味着不同的东西),所以你只是得到buffer指针的地址,这是一个void**。如果您只想要buffer的副本,请执行initialAddress = buffer;

+0

@jrok忘了提及。 – 2014-12-04 12:41:05

+0

为什么任何人都想使用std :: addressof? – 2014-12-04 12:55:41

+3

@MichaelIV因为'operator&'可能会因某种类型而过载。 'std :: addressof'避免了这种过载。 – 2014-12-04 12:56:27

2

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