铸造损失精度[-fpermissive]

问题描述:

即时试图将地址添加到模块基地址铸造损失精度[-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位(或更大)指针访问的有效偏移量。 –

正如在评论中提到的,指针的大小取决于平台(64位或32位),而整数(int,long,long int ...)通常是32位同时。将指针转换为整数可能会在64位编译时产生一些精度,这就是警告的原因。