【问题标题】:Store pointer address with std::adressof用 std::addressof 存储指针地址
【发布时间】:2014-12-04 20:38:31
【问题描述】:

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

我这样做:

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

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

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

    initialAddress = buffer;

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

【问题讨论】:

    标签: c++ pointers c++11


    【解决方案1】:

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

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

    【讨论】:

    • @jrok 忘了说。
    • 为什么会有人想要使用 std::addressof ?
    • @MichaelIV 因为operator& 可能会因某种类型而被重载。 std::addressof 避免了过载。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-07-18
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多