gpt4 book ai didi

c++ - 从 LPVOID 中减去

转载 作者:行者123 更新时间:2023-11-28 02:33:20 31 4
gpt4 key购买 nike

不是很教授。用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 是堆 block 数据部分的地址。我想读取 Entry.lpData 地址前的 8 个字节。所以当我简单地从 Entry.lpData 中减去 8 并尝试读取字节时,我得到了错误

hexDump(entry.lpData - 8, 8);


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

最佳答案

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

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

这是有效的,因为 char*the strict aliasing rule 的一个异常(exception).不要尝试使用任意类型。

关于c++ - 从 LPVOID 中减去,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28373744/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com