从LPVOID中减去

时间:2015-02-06 19:58:26

标签: c++

不是很教授。用C ++。我一直在研究的代码是:https://msdn.microsoft.com/en-us/library/windows/desktop/ee175819(v=vs.85).aspx

我的问题在于这个领域:

_tprintf(TEXT("  Data portion begins at: %#p\n  Size: %d bytes\n") \
             TEXT("  Overhead: %d bytes\n  Region index: %d\n\n"),
             Entry.lpData,
             Entry.cbData,
             Entry.cbOverhead,
             Entry.iRegionIndex);
}

我遇到的问题是, Entry.lpData 是堆块数据部分的地址。我想在 Entry.lpData 地址之前读取8个字节。因此,当我只是从Entry.lpData中减去8并尝试读取字节时,我收到了错误

hexDump(entry.lpData - 8, 8);


heapwalk.cpp(119): error C2036: 'PVOID' : unknown size

1 个答案:

答案 0 :(得分:2)

指向void的指针指向任何的指针,因此直接对它们执行指针运算是没有意义的。在这种情况下,由于您知道需要一个8字节的偏移量,因此您只需先将其转换为char*。在一般情况下,您将知道它实际指向的数据类型并将其转换为该类型的指针。

char *p = static_cast<char*>(entry.lpData) - 8;

这是有效的,因为char*the strict aliasing rule的例外。不要以任意类型尝试这个。