Сохранить адрес указателя с помощью std :: adressof

0

Я, вероятно, что-то пропустил здесь. Мне нужно сохранить адрес указателя недавно выделенного фрагмента памяти.

Я делаю это:

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

Начальный адрес имеет другой адрес, чем адрес буфера.

Только если я назначу указатель буфера, я получаю тот же адрес (что, конечно же, правильное дело):

    initialAddress = buffer;

Итак, почему std :: addressof (buffer) показывает другой адрес? Я использую VS2012 для отладки. Может быть, адрес указателя, а не адрес буфера?

Теги:
pointers
c++11

2 ответа

5
Лучший ответ

Может быть, этот адрес указателя, а не адрес буфера?

Это точно. Выполнение std::addressof(buffer) совпадает с выполнением &buffer (но иногда они могут означать разные вещи), поэтому вы просто получаете адрес указателя buffer, который является void**. Если вам просто нужна копия buffer, сделайте initialAddress = buffer; ,

  • 0
    @jrok Забыл упомянуть об этом.
  • 0
    Почему тогда кто-то захочет использовать std :: addressof?
Показать ещё 1 комментарий
2

Вы сравниваете адрес, на который указывает buffer и адрес самого buffer. Они разные.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню