sizeof没有返回LPVOID变量的正确大小

sizeof is not returning correct size of LPVOID variable

本文关键字:变量 返回 LPVOID sizeof      更新时间:2023-10-16

sizeof没有返回tData所指向的Data的大小My compiler visual studio c++ 2012

bool FixReloc(LPVOID pModule,LPVOID tData,LPVOID pAddressNew,DWORD pAdrressOld,WORD fImageX64)
{
    DWORD iDelta = (DWORD)pAddressNew - pAdrressOld;
    long iSize =  sizeof (tData);

iSize为4,但当我创建tData时,我就这样做了

byte* tData = new byte[2057];
relocRaw = reinterpret_cast<byte*>(pointerToRawData + (virtualAddressBaseReloc - virtualAddress));

size应为2057有解决方案吗?

机器上的指针是4字节宽。如果想要获得指针所指向对象的大小,必须对其解引用:

long iSize = sizeof(tData);  // Gets size of pointer = 4
iSize = sizeof(*tData);      // Gets size of pointed object, which is sizeof(void), which is implementation defined

不幸的是,解引用void *对您来说不是很有用,因为它的实现已定义(或未定义),即使已定义,也无法帮助您获得字节数组的大小。