2014-12-04 66 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本身的地址。他們是不同的。