2017-02-15 59 views
0

即時試圖將地址添加到模塊基地址鑄造損失精度[-fpermissive]

HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pId); 
    MODULEENTRY32 module; 
    module.dwSize = sizeof(MODULEENTRY32); 
    Module32First(snapshot, &module); 


    CloseHandle(snapshot); 
     DWORD addr = 0x1D4192 + (DWORD)module.modBaseAddr; 

我不知道什麼是錯的

+0

C++/commenttooshort –

+4

在64位系統指針通常是64位寬。 'int'(因此也是'unsigned int')通常只有32位寬。現在想想當您嘗試將64位值轉換爲32位值時會發生什麼。 –

+0

除非您的平臺支持未對齊的加載/存儲操作,否則'0x1D4192'看起來不像是通過32位(或更大)指針訪問的有效偏移量。 –

回答

1

正如在評論中提到的,指針的大小取決於平臺(64位或32位),而整數(int,long,long int ...)通常是32位同時。將指針轉換爲整數可能會在64位編譯時產生一些精度,這就是警告的原因。