Я, вероятно, что-то пропустил здесь. Мне нужно сохранить адрес указателя недавно выделенного фрагмента памяти.
Я делаю это:
void* buffer = _aligned_malloc(4096,4);
assert(buffer);
//save its original address:
void* initialAddress = (void*) std::addressof(buffer );
Начальный адрес имеет другой адрес, чем адрес буфера.
Только если я назначу указатель буфера, я получаю тот же адрес (что, конечно же, правильное дело):
initialAddress = buffer;
Итак, почему std :: addressof (buffer) показывает другой адрес? Я использую VS2012 для отладки. Может быть, адрес указателя, а не адрес буфера?
Может быть, этот адрес указателя, а не адрес буфера?
Это точно. Выполнение std::addressof(buffer)
совпадает с выполнением &buffer
(но иногда они могут означать разные вещи), поэтому вы просто получаете адрес указателя buffer
, который является void**
. Если вам просто нужна копия buffer
, сделайте initialAddress = buffer;
,
Вы сравниваете адрес, на который указывает buffer
и адрес самого buffer
. Они разные.