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

时间:2014-08-08 19:13:45

标签: c++ visual-c++

sizeof没有返回tData指向的数据的大小 我的编译器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));

iSize应该是2057年 任何解决方案?

1 个答案:

答案 0 :(得分:1)

机器上的指针宽度为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 *对你来说并不是很有用,因为它的实现是定义的(或未定义的),即使定义它也无法帮助你获得字节数组的大小。