簡體   English   中英

從LPVOID減去

[英]Subtracting from LPVOID

不是很教授。 使用C ++。 我一直在處理的代碼是: https : //msdn.microsoft.com/zh-cn/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

指向void的指針是指向任何東西的指針,因此直接對它們執行指針算術沒有意義。 在這種情況下,由於您知道需要8個字節的偏移量,因此只需將其首先轉換為char* 在一般情況下,您會知道它實際指向哪種數據並將其強制轉換為該類型的指針。

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

之所以char*是因為char*嚴格別名規則的例外。 請勿嘗試使用任意類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM