2014-12-04 2 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; 

그럼, 왜 표준 : AddressOf를 (버퍼) 다른 주소를 보여줍니다

나는 버퍼 포인터 나는 (물론입니다 일이 옳은 일) 같은 주소를 얻고을 할당 할 경우에만? 디버그하려면 VS2012 사용하고 있습니다. 아마도 버퍼의 주소가 아닌 포인터의 주소일까요?

답변

5

버퍼의 주소가 아닌 포인터의 주소일까요?

그게 전부입니다. std::addressof(buffer)을 수행하는 것은 &buffer과 같지만 (때로는 다른 것을 의미 할 수 있음) buffer 포인터의 주소 인 void**을 얻는 것입니다. 대신 buffer 사본을 원할 경우 initialAddress = buffer;을 입력하십시오.

+0

@jrok 그 말을 잊어 버리십시오. –

+0

그렇다면 누구나 std :: addressof를 사용하고 싶습니까? –

+3

@MichaelIV 왜냐하면'operator &'는 특정 유형에 대해 오버로드 될 수 있기 때문입니다. 'std :: addressof'는 오버로드를 피한다. –

2

주소가 buffer이고 주소가 buffer 인 주소를 비교하고 있습니다. 그들은 다르다.

관련 문제